Python中的@staticmethod和@classmethod的用法

引言

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

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

從使用上看@staticmethod和@classmethod的區別

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

如果在@staticmethod中要調用到這個類的一些屬性方法,只能直接類名.屬性名類名.方法名
而@classmethod因爲持有cls參數,可以來調用類的屬性,類的方法,實例化對象等,避免硬編碼。

代碼理解

class A(object):
    bar = 1
    def foo(self):
        print('foo')

    @staticmethod
    def static_foo():
        print('static_foo')
        print(A.bar)

    @classmethod
    def class_foo(cls):
        print('class_foo')
        print(cls.bar)
        cls().foo()

A.static_foo()
A.class_foo()

結果爲:

static_foo
1
class_foo
1
foo

聲明: 部分內容來源於:polyhedronx的博客

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