python呼叫方法必須例項化麼

ciscopuke發表於2021-09-11

python呼叫方法必須例項化麼

python類中的例項方法和靜態方法,在呼叫時,是有區別的。靜態方法可以直接被呼叫,而不需要被例項化。

類方法和靜態方法的區別在於,Python會自動繫結類方法的第一個引數,類方法的第一個引數(通常建議引數名為 cls)會自動繫結到類本身;但對於靜態方法則不會自動繫結。

使用 @classmethod 修飾的方法就是類方法;使用 @staticmethod 修飾的方法就是靜態方法。

下面程式碼示範了定義類方法和靜態方法:

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 程式設計時,一般不需要使用類方法或靜態方法,程式完全可以使用函式來代替類方法或靜態方法。但是在特殊的場景(比如使用工廠模式)下,類方法或靜態方法也是不錯的選擇。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4369/viewspace-2835223/,如需轉載,請註明出處,否則將追究法律責任。

相關文章