类中三种函数的应用::self.data = data:# for item in arg:# print item.dataprint(“printself: “, arg):print(“stattic: “, arg):print(“class: “, arg):obj = TClassStatic(10)obj.printself()obj.smethod()obj.cmethod()if __name__ == “__main__”:main()
通过三种函数的调用可以很清楚的看出,各种函数的默认参数,输出结果如下:
: ‘, (<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的应用实例:obj_num = :self.data = dataTClassStatic.obj_num += :print(“self.data: “, self.data):print(“the number of obj is : “, TClassStatic.obj_num):print(“cmethod : “, cls.obj_num)cls.smethod():objA = TClassStatic(10)objB = TClassStatic(12)objB.printself()objA.smethod()objB.cmethod()print(“——————————“)TClassStatic.smethod()TClassStatic.cmethod()if __name__ == “__main__”:main()
输出结果如下:
(‘self.data: ‘, 12)(‘obj is : ‘, 2)(‘cmethod : ‘, 2)(‘obj is : ‘, 2)——————————(‘obj is : ‘, 2)(‘cmethod : ‘, 2)(‘obj is : ‘, 2)
你不勇敢,没人替你坚强。