python中classmethod与staticmethod的差异及应用

类中三种函数的应用::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)

你不勇敢,没人替你坚强。

python中classmethod与staticmethod的差异及应用

相关文章:

你感兴趣的文章:

标签云: