標籤: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的差異及應用