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()
1.instancemethod
在定义foo(self,x)
方法时,将self
作为第一个参数,而调用时就隐式地将a
作为第一个参数传入,而我们只要传一个参数即可。
a.foo(1)
# executing foo(<__main__.A object at 0xb7dbef0c>,1)
2.classmethod
类似instancemethod,只是第一个参数变成了cls
a.class_foo(1)
# executing class_foo(<class '__main__.A'>,1)
3.staticmethods
slef
(the object instance)和cls
(the class)都不会传入方法,这个和再类外定义一个函数没有区别,只是有些时候某些方法在逻辑上属于某个类的时候,才用。
a.static_foo(1)
# executing static_foo(1)
4.总结
foo
只是一个方法,当使用a.foo
时,将instance作为第一个参数与foo
进行绑定。
当使用A.class_foo
时,将类A作为第一个参数与之相绑定。
档使用A.static_foo
时,没有与instance和class绑定,定义和调用时都只是一个参数。
https://stackoverflow.com/questions/136097/difference-between-staticmethod-and-classmethod?r=SearchResults