靜態方法@staticmethod和類方法@classmethod的異同
阿新 • • 發佈:2018-12-15
我們都知道,普通的類方法需要經過例項化物件後,才能呼叫使用 而經過@staticmethod和@classmethod裝飾後的類方法這不需要例項化來呼叫,可以直接用類名來呼叫,類名.方法名(),但是也能夠例項化後呼叫
這有利於組織程式碼,把某些應該屬於某個類的函式給放到那個類裡去,同時有利於名稱空間的整潔。
區別: @staticmethod不用表示自身物件的self引數,也不用表示自身類的cls引數,用法就像普通函式一樣,呼叫類屬性和方法時,用類名.屬性名和類名.方法名()
@classmethond也沒有表示自身物件的self引數,但是有一個表示自身類的引數cls,呼叫類屬性和方法時,用cls.屬性呼叫類屬性,用cls().方法()呼叫類方法
class Base(object): num = 1 def func(self): print('abc') @staticmethod def static_func(): print('static_abc') print(Base.num) Base().func() @classmethod def class_func(cls): print('class_abc') print(cls.num) cls().func() Base.static_func() Base.class_func() a = Base() a.func()
輸出: static_abc 1 abc class_abc 1 abc abc