python靜態(tài)方法與類方法
1. 寫法上的差異
類的方法可以分為:
靜態(tài)方法:有 staticmethod 裝飾的函數(shù)
類方法:有 classmethod 裝飾的函數(shù)
實例方法:沒有任何裝飾器的普通函數(shù)
舉個例子,如下這段代碼中,run 普通的實例方法,eat 是靜態(tài)方法,jump 是類方法。
class Animal:
def __init__(self, name):
self.name = name
def run(self):
print(f"{self.name}跑起來啦")
@staticmethod
def eat():
print("正在吃飯...")
@classmethod
def jump(cls, name):
print(f"{name}跳起來啦")
這三種方法,在寫法有很大的區(qū)別:
1、普通的實例方法,在定義時,他的第一個方法固定是 self,如果是從實例調(diào)用,那么 self 參數(shù) 不需要傳入,如果是通過類調(diào)用,那么 self 要傳入已經(jīng)實例化的對象。
>>> dog=Animal(name="小黑")
>>> dog.run()
小黑跑起來啦
>>> Animal.run(dog)
小黑跑起來啦
2、靜態(tài)方法,在定義時,不需要 self 參數(shù)。
>>> dog=Animal(name="小黑")
>>> dog.eat()
正在吃飯...
>>> Animal.eat()
正在吃飯...
3、類方法,在定義時,第一個參數(shù)固定是 cls,為 class 的簡寫,代表類本身。不管是通過實例還是類調(diào)用類方法,都不需要傳入 cls 的參數(shù)。
>>> dog=Animal(name="小黑")
>>> dog.jump("小黑")
小黑跳起來啦
>>> Animal.jump("小黑")
小黑跳起來啦
2. 方法與函數(shù)區(qū)別
在前面,我們很經(jīng)常提到方法和函數(shù),為免有同學(xué)將他們混為一談,我這里總結(jié)一下他們的區(qū)別。
在 Python 3.x 中,
普通函數(shù)(未定位在類里)和靜態(tài)方法,都是函數(shù)(function )。
實例方法(@staticmethod)和類方法,都是方法(method )。
這些結(jié)論其實都可以使用 type 函數(shù)得到驗證。
先準(zhǔn)備如下代碼
class Animal:
def __init__(self, name):
self.name = name
def run(self):
print(f"{self.name}跑起來啦")
@staticmethod
def eat():
print("正在吃飯...")
@classmethod
def jump(cls, name):
print(f"{name}跳起來啦")
def demo_func():
pass
然后進(jìn)入 Python Console 模式
>>> type(demo_func) # 普通函數(shù)
>>> type(dog.eat) # 靜態(tài)方法
>>>
>>> type(dog.run) # 實例方法
>>> type(dog.jump) # 類方法
方法是一種和對象(實例或者類)綁定后的特殊函數(shù)。
方法本質(zhì)上還是函數(shù),不同之處在于它與對象進(jìn)行綁定。
審核編輯:符乾江
-
面向?qū)ο?/span>
+關(guān)注
關(guān)注
0文章
64瀏覽量
10253 -
python
+關(guān)注
關(guān)注
57文章
4877瀏覽量
90077
發(fā)布評論請先 登錄
如何分辨五類六類網(wǎng)線
單片機系統(tǒng)硬件的調(diào)試方法
求助,靜態(tài)電流測試,穩(wěn)態(tài)測試怎么做
Python調(diào)用API教程
開關(guān)電源測試流程方法合集
利用軟件的方法解決EMC問題
諧波源定位常用的方法有哪些?
動態(tài)調(diào)整同步周期的具體方法是什么?
邊聊安全 | 軟件單元測試的設(shè)計方法
在Python中字符串逆序有幾種方式,代碼是什么
詳解ADC電路的靜態(tài)仿真和動態(tài)仿真
python靜態(tài)方法與類方法
評論