您好,登錄后才能下訂單哦!
這篇文章主要介紹了python中靜態方法和類方法有哪些區別,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。
區別:
靜態方法裝飾器下定義的方法屬于函數(function);
類方法裝飾器下定義的方法屬于方法(method);
靜態方法無需傳入任何參數;
類方法傳入的第一個參數必須是class本身cls;
靜態方法與類方法一旦被調用,內存地址即確定。通過類調用和通過實例化對象調用的結果完全一樣。
直接上代碼:
# coding:utf-8 class Apple: def fun1(self): return 'normal' @staticmethod def fun2(): return 'staticmethod' @classmethod def fun3(cls): return 'classmethod' print Apple.fun1 print Apple.fun2 print Apple.fun3 print "-"*80 apple = Apple() print apple.fun1 print apple.fun2 print apple.fun3 print "-"*80 apple1 = Apple() print apple1.fun1 print apple1.fun2 print apple1.fun3
運行結果:
<unbound method Apple.fun1> <function fun2 at 0x00000000022FC4A8> <bound method classobj.fun3 of <class __main__.Apple at 0x0000000001E7C768>> -------------------------------------------------------------------------------- <bound method Apple.fun1 of <__main__.Apple instance at 0x00000000022FAE08>> <function fun2 at 0x00000000022FC4A8> <bound method classobj.fun3 of <class __main__.Apple at 0x0000000001E7C768>> -------------------------------------------------------------------------------- <bound method Apple.fun1 of <__main__.Apple instance at 0x00000000022FAE48>> <function fun2 at 0x00000000022FC4A8> <bound method classobj.fun3 of <class __main__.Apple at 0x0000000001E7C768>>
普通方法傳入的第一個參數必須是self(當然也可以不用self,官方要求盡量用self),self是指實例對象本身;靜態方法無需傳參;
類方法傳入的第一個參數必須是class,是指類本身。
對比結果1,5,9行
fun1通過class調用時,它是未綁定的方法,而實例化apple和apple1之后,它屬于綁定的方法,且實例化后的apple和apple1內存地址不同,因為它們屬于不同的實例對象。
對比結果2,6,10行
靜態方法fun2通過class調用或者通過實例化后的對象調用,是沒有任何區別的,全部都是指向同一塊內存地址。可以簡單的理解成靜態方法與類或者實例沒有任何關系,一旦調用后,它的內存地址即確定。
對比結果3,7,11行
類方法fun3通過class調用或者通過實例化后的對象調用,是沒有任何區別的,全部都是指向同一塊內存地址。為什么?因為實例化對象apple和apple1調用類方法fun3傳入的第一個參數是類本身Apple,也就是說apple.fun3 = apple1.fun3 = Apple.fun3。
感謝你能夠認真閱讀完這篇文章,希望小編分享python中靜態方法和類方法有哪些區別內容對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,遇到問題就找億速云,詳細的解決方法等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。