- instance method
- 物件層級
- 定義前的修飾字:無
- 定義語法: def method_name(self, ...): ...
- self 是該instance 的 reference
- 呼叫方法: instance.method_name(...)
- method當中使用物件/類別屬性的方式
- self.AAA = 10 # 將物件層級屬性AAA設為 10
- type(self).BBB = 20 # 將物件類別的類別層級屬性BBB設為 20
- ClassC.CCC = 30 # 將ClassC的類別層級屬性CCC設為30,ClassC未必是自己的類別
- class method
- 類別層級 (假設類別為 C)
- 定義前的修飾字:@classmethod
- 定義語法: def method_name(cls, ...): ...
- cls 是該 class 的 reference
- 呼叫方法:C.method_name(...) 或 instance_of_c.method_name(...)
- method當中使用類別屬性的方式
- cls.BBB = 20 # 將當下類別層級屬性BBB設為 20
- C.BBB = 20 # 將C的類別層級屬性BBB設為 20
- ClassC.CCC = 30 # 將ClassC的類別層級屬性CCC設為30,ClassC未必是自己的類別
- static method
- 類別層級 (假設類別為 C)
- 定義前的修飾字:@staticmethod
- 定義語法: def method_name(...): ...
- 呼叫方法:C.method_name(...) 或 instance_of_c.method_name(...)
- method當中使用類別屬性的方式
- C.BBB = 20 # 將C的類別層級屬性BBB設為 20
- ClassC.CCC = 30 # 將ClassC的類別層級屬性CCC設為30,ClassC未必是自己的類別
2018年1月20日 星期六
Python 3 的 class: instance method、class method、static method的區別
在Python 3當中,一個類別(class)的成員函式(member function/method),可以定義成instance method、class method、或是static method。instance method是物件層級的函式,而class method和static method是類別層級(無法存取物件層式的屬性)的函式(基本大觀念假設不細講)。以下大致比較一下這三者:
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言