class A(object):
def foo(self,x):
print "executing foo(%s,%s)"%(self,x)
@classmethod
def class_foo(cls,x):
print "executing class_foo(%s,%s)"%(cls,x)
@staticmethod
def static_foo(x):
print "executing static_foo(%s)"%x
a=A()
一般方法将实例对象本身隐式传入方法中作为第一个参数:
a.foo(1)
# executing foo(<__main__.A object at 0xb7dbef0c>,1)
@classmethod方法将实例对象的类作为第一个参数隐式(或显示)传入方法中作为第一个参数:
a.class_foo(1)
# executing class_foo(<class '__main__.A'>,1)
@staticmethod方法既不传入实例对象本身也不传入实例对象的类作为参数
a.static_foo(1)
# executing static_foo(1)
A.static_foo('hi')
# executing static_foo(hi)