重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
創新互聯www.cdcxhl.cn八線動態BGP香港云服務器提供商,新人活動買多久送多久,劃算不套路!
這篇文章主要介紹了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
運行結果:
> -------------------------------------------------------------------------------- > > -------------------------------------------------------------------------------- > >
普通方法傳入的第一個參數必須是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中靜態方法和類方法有哪些區別內容對大家有幫助,同時也希望大家多多支持創新互聯,關注創新互聯-成都網站建設公司行業資訊頻道,遇到問題就找創新互聯,詳細的解決方法等著你來學習!