1. 程式人生 > >Python中的classmethod與staticmethod

Python中的classmethod與staticmethod

參數 pri 類的屬性 method 而不是 blog pan bsp clas

首先,這是一個經典的問題。

我們首先做一個比較:

classmethod的第一個參數是cls,即調用的時候要把傳入

這意味著我們我們可以在classmethod裏使用類的屬性,而不是類的實例的屬性(顯式創建可用)

staticmethod,調用的時候沒有參數,即調用的時候我們不傳入東西(類,類的實例)

這意味著我們在staticmethod裏無法得到類的實例(顯式創建可用)

而我們調用類的普通方法的時候,要把self傳進去

這意味著在這個普通方法裏,我們只能使用類的實例(self)的屬性方法

至於怎麽調用呢?看下面:

class A(object):  
    bar = 1  
    def
foo(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