Python中的classmethod與staticmethod
阿新 • • 發佈:2018-01-06
參數 pri 類的屬性 method 而不是 blog pan bsp clas
首先,這是一個經典的問題。
我們首先做一個比較:
classmethod的第一個參數是cls,即調用的時候要把類傳入
這意味著我們我們可以在classmethod裏使用類的屬性,而不是類的實例的屬性(顯式創建可用)
staticmethod,調用的時候沒有參數,即調用的時候我們不傳入東西(類,類的實例)
這意味著我們在staticmethod裏無法得到類的實例(顯式創建可用)
而我們調用類的普通方法的時候,要把self傳進去
這意味著在這個普通方法裏,我們只能使用類的實例(self)的屬性方法
至於怎麽調用呢?看下面:
class A(object): bar = 1 deffoo(self): print ‘foo‘ @staticmethod def static_foo(): print ‘static_foo‘ print A.bar # static_foo位於class A中,A相當於全局的,所以能訪問到A的屬性 A().foo() # static_foo位於class A中,A相當於全局的,所以能訪問到A的方法
@classmethod def class_foo(cls): print ‘class_foo‘ print cls.bar # 等於調用 A.bar cls().foo() # 等於調用 A().foo() A.static_foo() A.class_foo()
輸出:
static_foo, 1,foo
class_foo,1,foo
一目了然
Python中的classmethod與staticmethod