python中classmethod與staticmethod的差異及應用

來源:互聯網
上載者:User

標籤:python   staticmethod   

類中三種函數的應用
#!/usr/bin/env python# -*- coding: utf-8 -*-class TClassStatic(object):    def __init__(self, data):        self.data = data    def printself(*arg):        # for item in arg:            # print item.data        print("printself: ", arg)    @staticmethod    def smethod(*arg):        print("stattic: ", arg)    @classmethod    def cmethod(*arg):        print("class: ", arg)def main():    obj = TClassStatic(10)    obj.printself()    obj.smethod()    obj.cmethod()if __name__ == "__main__":    main()

通過三種函數的調用可以很清楚的看出,各種函數的預設參數,輸出結果如下:

(‘printself: ‘, (<__main__.TClassStatic object at 0x6ffffe22910>,))(‘stattic: ‘, ())(‘class: ‘, (<class ‘__main__.TClassStatic‘>,))

1、普通函數,預設傳入參數self,相當於C++中的this指標。解除printself中的注釋,可以輸出第一個參數的data就是對象的data(10)。這類函數的定義通常為def printself(self, *args, **kwargs),其特徵是第一個參數為self,調用的時候只需傳args,kwargs的值,執行個體對象.方法
2、@staticmethod修飾的函數,相當於C++中的類中靜態函數,可以當做全域函數應用,預設不傳入參數,調用方法:執行個體對象或類對象.方法
3、@classmethod修飾的函數,第一個參數cls預設是類名,調用方法:執行個體對象或類對象.方法

@classmethod與@staticmethod的應用執行個體
#!/usr/bin/env python# -*- coding: utf-8 -*-class TClassStatic(object):    obj_num = 0    def __init__(self, data):        self.data = data        TClassStatic.obj_num += 1    def printself(self):        print("self.data: ", self.data)    @staticmethod    def smethod():        print("the number of obj is : ", TClassStatic.obj_num)    @classmethod    def cmethod(cls):        print("cmethod : ", cls.obj_num)        cls.smethod()def main():    objA = TClassStatic(10)    objB = TClassStatic(12)    objB.printself()    objA.smethod()    objB.cmethod()    print("------------------------------")    TClassStatic.smethod()    TClassStatic.cmethod()if __name__ == "__main__":    main()

輸出結果如下:

(‘self.data: ‘, 12)(‘the number of obj is : ‘, 2)(‘cmethod : ‘, 2)(‘the number of obj is : ‘, 2)------------------------------(‘the number of obj is : ‘, 2)(‘cmethod : ‘, 2)(‘the number of obj is : ‘, 2)

python中classmethod與staticmethod的差異及應用

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.