淺談python 類方法/靜態(tài)方法
1.類方法
類方法是從屬于"類對象"的方法。類對象可以通過裝飾器@classmethod來定義,具體格式如下:
@classmethod def 類方法名(cls [, 形參列表]): 方法體
要點如下:
- @classmethod必須位于方法的上面一行
- 第一個參數(shù)cls(class的縮寫,和前面筆記介紹的self類似),必須要有,代指"類對象"本身。
- 調(diào)用類方法格式:類名.類方法名(參數(shù)列表)。參數(shù)列表中不需要也不能給cls參數(shù)進行傳值,解釋器會自動賦值。
- 類方法中可以訪問實例屬性和實例方法會導(dǎo)致錯誤,因為有類不一定有對象。
- 子類繼承父類方法時,傳入cls是自身對象,而非父類對象。(后面的筆記會有介紹)
代碼示例:
class Student:
count = 0 # 類屬性
"""定義方法"""
@classmethod
def print_count(cls):
"""cls參數(shù)代表類對象"""
print(Student.count)
"""調(diào)用類方法"""
print("調(diào)用時,不傳遞cls參數(shù)")
Student.print_count()
運行結(jié)果:
調(diào)用時,不傳遞cls參數(shù)
0
2.靜態(tài)方法
在python中,允許定義于”類對象“無關(guān)的方法,稱為"靜態(tài)方法"。
"靜態(tài)方法"和在模塊中定義的普通方法沒有什么區(qū)別,只不過"靜態(tài)方法"放到了"類的名字變量空間",需要通過類調(diào)用。
靜態(tài)方法通過裝飾器@staticmethod來定義,格式如下:
@staticmethod def 靜態(tài)方法名([形參列表]): 方法體
要點如下:
- @staticmethod必須位于方法上面一行
- 調(diào)用靜態(tài)方法格式:類名.靜態(tài)方法名(參數(shù)列表)
- 靜態(tài)方法中訪問實例屬性和實例方法會導(dǎo)致錯誤
代碼示例:
class Student:
count = 0 # 類屬性
@staticmethod
def add(a, b):
"""與類無關(guān)的靜態(tài)方法"""
"""因為靜態(tài)方法從屬于類,所以是可以操作類屬性和類方法"""
print("{0}+{1}={2}".format(a, b, a+b))
return a + b
# 調(diào)用靜態(tài)方法
Student.add(20, 30)
運行結(jié)果:
20+30=50
res=50
3.實例方法/類方法/靜態(tài)方法的區(qū)別
class MyClass:
# 類屬性
class_attr = 0
def __init__(self, obj_attr):
self.obj_attr = obj_attr
def instance_method(self):
return "instance method called", self
@classmethod
def class_method(cls):
return "class method called", cls
@staticmethod
def static_method():
return "static method called"
print("調(diào)用實例方法")
obj1 = MyClass("obj_attr1")
print(obj1.instance_method())
print("--" * 20)
print("調(diào)用類方法")
print(MyClass.class_method())
print("--" * 20)
print("調(diào)用靜態(tài)方法")
print(MyClass.static_method())
運行結(jié)果:
調(diào)用實例方法
('instance method called', <__main__.MyClass object at 0x10ca93310>)
----------------------------------------
調(diào)用類方法
('class method called', <class '__main__.MyClass'>)
----------------------------------------
調(diào)用靜態(tài)方法
static method called
注意: 以下討論的屬性、方法均指公開的類型,非私有的。
實例方法:
- 能讀取、修改實例屬性
- 能調(diào)用實例方法
- 能讀取、修改類屬性
- 能調(diào)用類方法
- 能調(diào)用類靜態(tài)方法
- 調(diào)用方式:對象名.實例方法名(參數(shù)列表),編譯器自動傳遞self參數(shù)
類方法:
- 不能讀取、修改實例屬性
- 不能用實例方法
- 能讀取、修改類屬性
- 能調(diào)用類方法
- 能調(diào)用類靜態(tài)方法
- 調(diào)用方式:類名.類方法名(參數(shù)列表),編譯器自動傳遞cls參數(shù)
靜態(tài)方法:
- 不能讀取、修改實例屬性
- 不能用實例方法
- 能讀取、修改類屬性
- 能調(diào)用類方法
- 能調(diào)用類靜態(tài)方法
- 調(diào)用方式: 類名.靜態(tài)方法名(參數(shù)列表),不需要cls參數(shù)
- 類方法和靜態(tài)方法,功能非常相近,可以相互替代, 但是從規(guī)范的角度來說,請按照實例方法操作對象,類方法操作類,靜態(tài)方法為和類無關(guān)的通用方法。
以上就是淺談python 類方法/靜態(tài)方法的詳細內(nèi)容,更多關(guān)于類方法/靜態(tài)方法的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
教你如何用一行Python代碼實現(xiàn)GUI圖形界面
GUI(圖形用戶界面),顧名思義就是用圖形的方式,來顯示計算機操作的界面,更加方便且直觀。本文將用一行代碼實現(xiàn)GUI界面的制作,需要的可以參考一下2022-05-05
Python數(shù)據(jù)類型之列表和元組的方法實例詳解
這篇文章主要介紹了Python數(shù)據(jù)類型之列表和元組的相關(guān)知識,列表是一組有序項目的集合 ,可變的數(shù)據(jù)類型可 進行增刪改查,本文通過實例文字相結(jié)合的形式給大家介紹的非常詳細 ,需要的朋友可以參考下2019-07-07
python+pywinauto+lackey實現(xiàn)PC端exe自動化的示例代碼
這篇文章主要介紹了python+pywinauto+lackey實現(xiàn)PC端exe自動化的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
淺談Python數(shù)學(xué)建模之整數(shù)規(guī)劃
整數(shù)規(guī)劃并不一定是線性規(guī)劃問題的變量取整限制,對于二次規(guī)劃、非線性規(guī)劃問題也有變量取整限制而引出的整數(shù)規(guī)劃。但在數(shù)學(xué)建模問題中所說的整數(shù)規(guī)劃,通常是指整數(shù)線性規(guī)劃。整數(shù)規(guī)劃與線性規(guī)劃的差別只是變量的整數(shù)約束。選擇簡單通用的編程方案,讓求解器去處理吧2021-06-06
詳解tf.device()指定tensorflow運行的GPU或CPU設(shè)備實現(xiàn)
這篇文章主要介紹了詳解tf.device()指定tensorflow運行的GPU或CPU設(shè)備實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02

