python靜態(tài)方法與類方法
1. 寫法上的差異
類的方法可以分為:
靜態(tài)方法:有 staticmethod
裝飾的函數(shù)
類方法:有 classmethod
裝飾的函數(shù)
實(shí)例方法:沒有任何裝飾器的普通函數(shù)
舉個(gè)例子,如下這段代碼中,run
普通的實(shí)例方法,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、普通的實(shí)例方法,在定義時(shí),他的第一個(gè)方法固定是 self,如果是從實(shí)例調(diào)用,那么 self 參數(shù) 不需要傳入,如果是通過類調(diào)用,那么 self 要傳入已經(jīng)實(shí)例化的對(duì)象。
>>> dog=Animal(name="小黑")
>>> dog.run()
小黑跑起來啦
>>> Animal.run(dog)
小黑跑起來啦
2、靜態(tài)方法,在定義時(shí),不需要 self 參數(shù)。
>>> dog=Animal(name="小黑")
>>> dog.eat()
正在吃飯...
>>> Animal.eat()
正在吃飯...
3、類方法,在定義時(shí),第一個(gè)參數(shù)固定是 cls,為 class 的簡(jiǎn)寫,代表類本身。不管是通過實(shí)例還是類調(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
)。
實(shí)例方法(@staticmethod)和類方法,都是方法(method
)。
這些結(jié)論其實(shí)都可以使用 type
函數(shù)得到驗(yàn)證。
先準(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) # 實(shí)例方法
>>> type(dog.jump) # 類方法
方法是一種和對(duì)象(實(shí)例或者類)綁定后的特殊函數(shù)。
方法本質(zhì)上還是函數(shù),不同之處在于它與對(duì)象進(jìn)行綁定。
審核編輯:符乾江
-
面向?qū)ο?/span>
+關(guān)注
關(guān)注
0文章
64瀏覽量
9994 -
python
+關(guān)注
關(guān)注
56文章
4799瀏覽量
84812
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論