方法類型
- 有些資料(屬性)與函式(方法)是類別本身的一部分,有些是「類型所建立的物件」的一部分
- 當在「類別定義」裡面看到初始的 self 引數時,它是一個實例方法
- 它們是在製作自己的類別時,經常編寫的方法類型
- 實例方法的第一個參數是 self,當呼叫方法時,Python 會將物件傳給它
類別方法:會影響整個類別
- 相較之下,類別方法會影響整個類別
- 對類別所做的任何修改,都會影響它的所有物件
- 在類別定義中,@classmethod 裝飾器說明接下來的函式是一個類別方法
- 同樣的,方法的第一個參數是類別本身
- 傳統上,Python 會將這個參數稱為 cls,因為 class 是保留字,不能在這裡使用
定義一個類別方法 → 用它來計算這個類別已經建立多少個物件實例
>>> class A():
count = 0
def __init__(self):
A.count += 1
def exclaim(self):
print("I'm an A!")
@classmethod # 在類別定義中,@classmethod 裝飾器說明接下來的函式是一個類別方法
def kids(cls):
print("A has", cls.count, "little objects.")
>>> easy_a = A()
>>> breezy_a = A()
>>> wheezy_a = A()
>>> A.kids()
A has 3 little objects.
靜態方法:不會影響類別與它的物件
- 第三種類別定義式中的方法類型
- 不會影響類別與它的物件
- 它只是為了方便才待在那裡
- 它是靜態方法,以 @staticmethod 裝飾器開頭 → 沒有原本的 self 或 class 參數
【範例】以下是 coyoteWeapon() 類別的廣告範例
>>> class CoyoteWeapon():
@staticmethod
def commercial():
print('This CoyoteWeapon has been brought to you by Acme')
>>> CoyoteWeapon.commercial()
This CoyoteWeapon has been brought to you by Acme