python笔记---@classmethod @staticmethod

python定义类方法的三种方式:

1.常规方式--需要通过self参数隐式的传递当前类对象的实例
2.@classmethod修饰方式--@classmethod修饰的方法class_foo()需要通过cls参数传递当前类对象
3.@staticmethod修饰方式--@staticmethod修饰的方法定义与普通函数是一样

class A(object):
def function(self, x):
print("executing function(%s,%s)" % (self, x))
print('self:', self)
@classmethod
def class_foo(cls, x):
print("executing class_function(%s,%s)" % (cls, x))
print('cls:', cls)
@staticmethod
def static_function(x):
print("executing static_function(%s)" % x)
a = A()

调用方式:

function调用需要通过实例a,class_function通过类对象或对象实例调用,static_function通过类对象或对象实例调用。

classmethod必须使用类对象作为第一个参数,而staticmethod则可以不传递任何参数。

self和cls的区别不是强制的,只是PEP8中一种编程风格,slef通常用作实例方法的第一参数,cls通常用作类方法的第一参数。即通常用self来传递当前类对象的实例,cls传递当前类对象。

原文地址:https://www.cnblogs.com/yuky/p/9756832.html