python中 classmethod、staticmethod和普通方法的区别
这三种方法在类和实例中都存在,都可被调用,但调用的时候默认默认传递的参数不同。
对于classmethod方法
当实例调用classmethod方法时,默认会把当前实例所对应的类传进去
当类调用classmethod方法时,默认把此类传进去
对于staticmethod方法
实例和类调用,没有默认的参数传进函数
对于普通方法
当实例调用时,默认将当前实例传进去
类调用时,只能以 类名.method(类实例) 形式调用
下面通过一个例子清楚说明具体调用情况:
class Locker(object):
a = 'aa'
@staticmethod
def show():
print 'show'
@classmethod
def display(cls):
print 'display'
def out(self):
print 'out'
cc = Locker()
#
Locker.show()
cc.show()
#
Locker.display()
cc.display()
#
Locker.out(cc)
cc.out()
运行结果:
show
show
display
display
out
out
我们修改classmethod方法:
class Locker(object):
a = 'aa'
@staticmethod
def show():
print 'show'
@classmethod
def display(cls):
print cls.a
def out(self):
print 'out'
cc = Locker()
cc.a = 'vv'
#
Locker.display()
cc.display()
结果:
aa
aa
可见当实例调用classmethod方法时,默认传入的参数是实例对应的类