python靜態方法與類方法
1. 寫法上的差異
類的方法可以分為:
靜態方法:有 staticmethod
裝飾的函數
類方法:有 classmethod
裝飾的函數
實例方法:沒有任何裝飾器的普通函數
舉個例子,如下這段代碼中,run
普通的實例方法,eat
是靜態方法,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}跳起來啦")
這三種方法,在寫法有很大的區別:
1、普通的實例方法,在定義時,他的第一個方法固定是 self,如果是從實例調用,那么 self 參數 不需要傳入,如果是通過類調用,那么 self 要傳入已經實例化的對象。
>>> dog=Animal(name="小黑")
>>> dog.run()
小黑跑起來啦
>>> Animal.run(dog)
小黑跑起來啦
2、靜態方法,在定義時,不需要 self 參數。
>>> dog=Animal(name="小黑")
>>> dog.eat()
正在吃飯...
>>> Animal.eat()
正在吃飯...
3、類方法,在定義時,第一個參數固定是 cls,為 class 的簡寫,代表類本身。不管是通過實例還是類調用類方法,都不需要傳入 cls 的參數。
>>> dog=Animal(name="小黑")
>>> dog.jump("小黑")
小黑跳起來啦
>>> Animal.jump("小黑")
小黑跳起來啦
2. 方法與函數區別
在前面,我們很經常提到方法和函數,為免有同學將他們混為一談,我這里總結一下他們的區別。
在 Python 3.x 中,
普通函數(未定位在類里)和靜態方法,都是函數(function
)。
實例方法(@staticmethod)和類方法,都是方法(method
)。
這些結論其實都可以使用 type
函數得到驗證。
先準備如下代碼
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
然后進入 Python Console 模式
>>> type(demo_func) # 普通函數
>>> type(dog.eat) # 靜態方法
>>>
>>> type(dog.run) # 實例方法
>>> type(dog.jump) # 類方法
方法是一種和對象(實例或者類)綁定后的特殊函數。
方法本質上還是函數,不同之處在于它與對象進行綁定。
審核編輯:符乾江
-
面向對象
+關注
關注
0文章
64瀏覽量
9985 -
python
+關注
關注
56文章
4797瀏覽量
84693
發布評論請先 登錄
相關推薦
評論