python中@staticmethod和@classmethod的作用與區別


一般來說,要使用某個類的方法,需要先實例化一個對象再調用方法。而使用@staticmethod或@classmethod,就可以不需要實例化,直接類名.方法名()來調用。

這有利於組織代碼,把某些應該屬於某個類的函數給放到那個類裏去,同時有利於命名空間的整潔。


既然@staticmethod和@classmethod都可以直接類名.方法名()來調用,那他們有什麼區別呢從它們的使用上來看,

  • @staticmethod不需要表示自身對象的self和自身類的cls參數,就跟使用函數一樣。

  • @classmethod也不需要self參數,但第一個參數需要是表示自身類的cls參數。

  •     如果在@staticmethod中要調用到這個類的一些屬性方法,只能直接“類名.屬性名“或“類名().方法名“。

  •     而@classmethod因爲持有cls參數,可以來調用類的屬性,類的方法,實例化對象等,避免硬編碼。



示例代碼如下:

A():
    bar = ():
        ():
        A.bar
        A().foo()


    ():
        .bar
        A.bar
        ().foo()
        A().foo()

A.static_foo()
A.class_foo()


輸入結果如下:

static_foo

A.bar= 1

foo

class_foo

cls.bar= 1

A.bar= 1

foo

foo




轉自:http://blog.csdn.net/handsomekang/article/details/9615239


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章