@classmethod
運用裝飾器語法將一個方法封裝成類方法
1 2 3 4 5 |
class C: @classmethod def f(cls, arg1, arg2): # 第一個引述為cls,非self pass |
類方法(classmethod)與靜態方法(static method)差異
- 類方法可以存取類屬性,也可實例類別對象,可用在工廠模式內加工物件
- 靜態方法無法訪問類或對象資料,用在輔助特定功能
EX: 類方法與靜態方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
class A: @classmethod def f1(cls, info): print(info) @staticmethod def f2(info): print(info) class B(A): pass A.f1('test') # test A.f2('test') # test B.f1('B test') # B test |
EX: 一般方法與類方法存取類屬性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
class B: data = 1 @classmethod def f1(cls): print("class method") print(cls.data) def f3(self): self.data += 10 B.f1() # 1 b = B() b.f3() print(a.data) # 11 B.f1() # 1,類方法存取類屬性不會被其他類物件修改 |