導讀: 1.類方法 2.靜態方法 3.類方法、實例方法、靜態方法 1. 類方法 類對象所擁有的方法。 需要用裝飾器@classmethod來標識其為類方法,對於類方法,第一個參數必須是類對象,一般以cls作為第一個參數。 類方法調用: 類名.類方法() 示例: 使用場景: 當方法中 需要使用類對象 ...
導讀:
1.類方法
2.靜態方法
3.類方法、實例方法、靜態方法
1. 類方法
類對象所擁有的方法。
需要用裝飾器@classmethod來標識其為類方法,對於類方法,第一個參數必須是類對象,一般以cls作為第一個參數。
類方法調用:
類名.類方法()
示例:
class Dog(object): __type = "狗" # 類方法,用classmethod來進行修飾 @classmethod def get_type(cls): return cls.__type print(Dog.get_type())
使用場景:
當方法中 需要使用類對象 (如訪問私有類屬性等)時,定義類方法。
類方法一般和類屬性配合使用。類方法中能夠訪問類屬性,但不能訪問實例屬性。
類方法的調用
- 類名.類方法名()
- 實例對象.類方法名()-- 不建議使用
2. 靜態方法
在類中往往有一些方法跟類有關係,但是又不會改變類和實例狀態的方法,這種方法是靜態方法。
需要通過裝飾器@staticmethod來進行修飾,靜態方法既不需要傳遞類對象也不需要傳遞實例對象(形參沒有self/cls),只需要接收我們自己需要的參數。
靜態方法 也能夠通過 實例對象 和 類對象 去訪問。
靜態方法調用:
類名.靜態方法()
示例:
class Dog(object): type = "狗" def __init__(self): name = None # 靜態方法 @staticmethod def introduce(): # 靜態方法不會自動傳遞實例對象和類對象 print("犬科哺乳動物,屬於食肉目..") dog1 = Dog() Dog.introduce() # 可以用 類對象 來調用 靜態方法 dog1.introduce() # 可以用 實例對象 來調用 靜態方法
使用場景:
當方法中 既不需要使用實例對象(如實例對象,實例屬性),也不需要使用類對象 (如類屬性、類方法、創建實例等)時,定義靜態方法。
取消不需要的參數傳遞,有利於 減少不必要的記憶體占用和性能消耗。
在靜態方法中使用類屬性:
類名.類屬性
3. 類方法、實例方法、靜態方法
- 類方法的第一個參數是類對象cls;
- 實例方法的第一個參數是實例對象self;
- 靜態方法沒有強制接收的參數。
- 類中定義了同名的對象方法、類方法、靜態方法時,調用方法會優先執行最後定義的方法。
示例1:
class Dog: def demo_method(self): print("對象方法") @classmethod def demo_method(cls): print("類方法") @staticmethod def demo_method(): # 被最後定義,調用時優先執行 print("靜態方法") dog1 = Dog() Dog.demo_method() # 結果: 靜態方法 dog1.demo_method() # 結果: 靜態方法
示例2:
class Person(object): __num = 0 def __init__(self): Person.__num += 1 @classmethod # 裝飾器 def get_num(cls): print(cls) # <class '__main__.Person'> return cls.__num @staticmethod def add2num(a,b): print(a+b) ls = Person() zs = Person() print(Person.get_num()) # 2 Person.add2num(11,22) # 33