类中三种函数的应用
#!/usr/bin/env python
# -*- coding: utf-8 -*-class TClassStatic(object):def __init__(self, data):self.data = datadef printself(*arg):# for item in arg:# print item.dataprint("printself: ", arg)@staticmethoddef smethod(*arg):print("stattic: ", arg)@classmethoddef 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 = 0def __init__(self, data):self.data = dataTClassStatic.obj_num += 1def printself(self):print("self.data: ", self.data)@staticmethoddef smethod():print("the number of obj is : ", TClassStatic.obj_num)@classmethoddef 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基础—-特性(property)、静态方法(staticmethod)、类方法(classmethod)、str的用法