Python中的實例方法、類方法、靜態方法和普通方法
阿新 • • 發佈:2018-04-09
turn 屬性和方法 靜態方法 一個 def col == pre 類屬性
為了辨析它們的差別,寫了如下代碼:
1 class C:
2
3 def self_method(self, a):
4 return a
5
6 @classmethod
7 def class_method(cls, a):
8 return a
9
10 @staticmethod
11 def static_method(a):
12 return a
13
14 def method(a):
15 return a
16
17 if __name__ == ‘__main__‘:
18 c = C()
19 print(c.self_method(‘self method‘))
20 print(c.class_method(‘class method‘))
21 print(c.static_method(‘static method‘))
22 # print(c.method(‘method‘)) 運行出錯
23 # print(C.self_method(‘self method‘)) 運行出錯
24 print(C.class_method(‘class method‘))
25 print(C.static_method(‘static method ‘))
26 print(C.method(‘method‘))
因此:
- 實例方法定義時第一個參數為類的一個實例(self),調用時必須通過實例調用。可以訪問實例屬性和方法。
- 類方法使用@classmethod裝飾,第一個參數為類(cls),調用時可以通過類的實例或者類本身來調用。可以訪問類屬性和方法。
- 靜態方法使用@staticmethod裝飾,調用時可以使用類的實例或者類本身來調用。
- 普通方法其實是在類中定義了一個普通函數,調用時必須通過類本身來調用。
Python中的實例方法、類方法、靜態方法和普通方法