類中三種函數的應用
#!/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的用法