天天看點

python中classmethod與staticmethod的差異及應用類中三種函數的應用@classmethod與@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()
    obj.printself()
    obj.smethod()
    obj.cmethod()

if __name__ == "__main__":
    main()
           

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

('printself: ', (<__main__.TClassStatic object atx6ffffe22910>,))
('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 = 
    def __init__(self, data):
        self.data = data
        TClassStatic.obj_num += 

    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()
    objB = TClassStatic()
    objB.printself()
    objA.smethod()
    objB.cmethod()
    print("------------------------------")
    TClassStatic.smethod()
    TClassStatic.cmethod()

if __name__ == "__main__":
    main()
           

輸出結果如下:

('self.data: ', )
('the number of obj is : ', )
('cmethod : ', )
('the number of obj is : ', )
------------------------------
('the number of obj is : ', )
('cmethod : ', )
('the number of obj is : ', )
           

參考

  • python基礎—-特性(property)、靜态方法(staticmethod)、類方法(classmethod)、str的用法