關於python中的實例方法、類方法以及靜態方法的小研究

在上篇博客的在線編程中需要實例化對象,然後調用類中定義的方法,這其中遇到點小問題,就是當去掉方法的第一個參數self後,直接調用方法(不使用實例對象調用,直接Find(4,array)),然後報錯:missing 1 required positional argument: 'self'

由於之前對這一塊沒有過深地研究,只知道self是默認的參數,傳參是不用管它,之前最多用在__init__方法中,現在稍微研究一下,看看這裏邊有什麼奧祕,上代碼:

# # -*- coding:utf-8 -*-
class Test:
    def instance(self):
        return "這是實例方法"

    @classmethod
    def classM(cls):
        return "這是類方法"

    @staticmethod
    def static():
        return "這是一個和類無關的方法"

t=Test()  #實例化對象
print(t.instance())
print(t.classM())
print(t.static())





如上所示,在類Test中定義了三個方法,第一個爲實例方法,參數爲self;第二個爲類方法,參數爲cls;第三個爲靜態方法,沒有參數,後兩者都使用了裝飾器,感興趣的朋友可以搜一下這一塊,之後有時間我也會探究一下。

之後分別用實例對象t調用這三個方法並輸出:

沒毛病,正常輸出,接着註釋掉上邊的代碼,改用類名直接調用:

print(Test.classM())
print(Test.static())
print(Test.instance())

報錯了:

報的錯和我之前遇到的一樣,其實這一點和java中很類似,類名不能直接調用實例方法,因爲當類初始化時還沒有實例對象,大概就是這麼個意思,總結一下:

實例方法

    定義:第一個參數必須是實例對象,該參數名一般約定爲“self”,通過它來傳遞實例的屬性和方法(也可以傳類的屬性和方法);

    調用:只能由實例對象調用。

類方法

    定義:使用裝飾器@classmethod。第一個參數必須是當前類對象,該參數名一般約定爲“cls”,通過它來傳遞類的屬性和方法(不能傳實例的屬性和方法);

    調用:實例對象和類對象都可以調用。

靜態方法

    定義:使用裝飾器@staticmethod。參數隨意,沒有“self”和“cls”參數,但是方法體中不能使用類或實例的任何屬性和方法;

    調用:實例對象和類對象都可以調用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章