Python的method, class method, static method

method是類的成員函數,必須由類的實例來調用,能夠訪問類的實例,第一個參數默認是實例。
class method能夠由類,類的實例來調用,但第一個參數默認是類
static method能夠由類,類的實例來調用,沒有默認參數python

class A:
    def __init__(self):
        self.i = 1

    @classmethod
    def cm(cls):
        print("class method, cls=", cls)

    def m(self):
        print("method, self={0}, i={1}".format(self, self.i))

    @staticmethod
    def sm():
        print("static method, A=", A)

if __name__ == '__main__':
    a = A()
    a.m()
    a.cm()
    a.sm()

結果以下:markdown

method, self=<__main__.A object at 0x02A2D190>, i=1 class method, cls= <class '__main__.A'> static method, A= <class '__main__.A'>

method就跟C++, Java中的成員方法同樣,使用也最廣泛;static method也相似,但在Python中能夠定義爲模塊的function也是同樣,使用staticmethod的緣由只是在邏輯上進行區分
而classmethod與staticmethod的區別在與classmethod的參數cls能夠被重載:函數

class AA(A):
    pass

if __name__ == '__main__':
    aa = AA()
    aa.cm()

結果以下:spa

class method, cls= <class '__main__.AA'>
相關文章
相關標籤/搜索