首頁  >  文章  >  後端開發  >  python類別方法和靜態方法的區別

python類別方法和靜態方法的區別

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼原創
2019-06-24 10:18:333148瀏覽

Python完全支援定義類別方法,甚至支援定義靜態方法。 Python的類別方法和靜態方法很相似,它們都建議使用類別來呼叫(其實也可以使用物件來呼叫)。

python類別方法和靜態方法的區別類別方法和靜態方法的差異

Python會自動綁定類別方法的第一個參數,類別方法的第一個參數(通常建議參數名為cls)會自動綁定到類別本身;但對於靜態方法則不會自動綁定。
使用 @classmethod 修飾的方法就是類別方法;使用 @staticmethod 修飾的方法就是靜態方法。

相關推薦:《Python影片教學
下面程式碼示範了定義類別方法和靜態方法:

class Bird:
    # classmethod修饰的方法是类方法
    @classmethod
    def fly (cls):
        print('类方法fly: ', cls)
    # staticmethod修饰的方法是静态方法
    @staticmethod
    def info (p):
        print('静态方法info: ', p)
# 调用类方法,Bird类会自动绑定到第一个参数
Bird.fly()  #①
# 调用静态方法,不会自动绑定,因此程序必须手动绑定第一个参数
Bird.info('crazyit')
# 创建Bird对象
b = Bird()
# 使用对象调用fly()类方法,其实依然还是使用类调用,
# 因此第一个参数依然被自动绑定到Bird类
b.fly()  #②
# 使用对象调用info()静态方法,其实依然还是使用类调用,
# 因此程序必须为第一个参数执行绑定
b.info('fkit')

從上面粗體字程式碼可以看出,使用@classmethod 修飾的方法是類別方法,該類別方法定義了一個cls 參數,該參數會被自動綁定到Bird 類別本身,不管程式是使用類別還是物件呼叫該方法,Python 總是會將類別方法的第一個參數綁定到類別本身,如① 號、② 號程式碼的執行效果。
上面程式也使用@staticmethod 定義了一個靜態方法,程式同樣既可使用類別調用靜態方法,也可使用物件呼叫靜態方法,不管用哪種方式調用,Python 都不會為靜態方法執行自動綁定。
使用 Python 程式設計時,一般不需要使用類別方法或靜態方法,程式完全可以使用函數來取代類別方法或靜態方法。但是在特殊的場景(例如使用工廠模式)下,類別方法或靜態方法也是不錯的選擇。

以上是python類別方法和靜態方法的區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn