python中靜態方法(@staticmethod)和類方法(@classmethod)的區別
阿新 • • 發佈:2019-01-19
方法 屬性方法 參數 pre 如果 icm ssm 使用 類方法
一般來說,要使用某個類的方法,需要先實例化一個對象再調用方法。
而使用@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()
python中靜態方法(@staticmethod)和類方法(@classmethod)的區別