首頁 > 後端開發 > Python教學 > python類別方法和靜態方法的區別

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

爱喝马黛茶的安东尼
發布: 2019-06-24 10:18:33
原創
3223 人瀏覽過

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中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板