Python中classmethod与staticmethod区别
生活随笔
收集整理的這篇文章主要介紹了
Python中classmethod与staticmethod区别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
- classmethod:類方法
- staticmethod:靜態方法
在python中,靜態方法和類方法都是可以通過類對象和類對象實例訪問。但是區別是:
- @classmethod 是一個函數修飾符,它表示接下來的是一個類方法,而對于平常我們見到的則叫做實例方法。 類方法的第一個參數cls,而實例方法的第一個參數是self,表示該類的一個實例。
- 普通對象方法至少需要一個self參數,代表類對象實例
- 類方法有類變量cls傳入,從而可以用cls做一些相關的處理。并且有子類繼承時,調用該類方法時,傳入的類變量cls是子類,而非父類。 對于類方法,可以通過類來調用,就像C.f(),有點類似C++中的靜態方法, 也可以通過類的一個實例來調用,就像C().f(),這里C(),寫成這樣之后它就是類的一個實例了。
- 靜態方法則沒有,它基本上跟一個全局函數相同,一般來說用的很少
Example 1:
>>> class a():@staticmethod def staticm(): print 'static' def normalm(self): print 'nomarl',self @classmethod def classm(cls): print 'class',cls>>> a1=a() >>> a1.normalm() nomarl <</span>__main__.a instance at 0x84dddec> >>> a1.staticm() static >>> a1.classm() class __main__.a >>> type(a) <</span>type 'classobj'> >>> type(a1) <</span>type 'instance'>Example 2:
''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' class A(object): @classmethod def cm(cls): print '類方法cm(cls)調用者:', cls.__name__ @staticmethod def sm(): print '靜態方法sm()被調用'class B(A): passA.cm() B.cm()A.sm() B.sm()輸出:
類方法cm(cls)調用者: A 類方法cm(cls)調用者: B 靜態方法sm()被調用 靜態方法sm()被調用 與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的Python中classmethod与staticmethod区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python坑:bool是int的子类、
- 下一篇: Python连接字符串用join还是+