让代码来说明这个问题:
>>> class A(object):
... a = None
... def b(self):
... pass
...
>>> a = A()
>>> a.a is a.a
True
>>> a.b is a.b
False
>>> class B(object):
... a = None
... @staticmethod
... def b():
... pass
...
>>> b = B()
>>> b.a is b.a
True
>>> b.b is b.b
True
>>> class C(object):
... a = None
... @classmethod
... def b(cls):
... pass
...
>>> c = C()
>>> c.a is c.a
True
>>> c.b is c.b
False
这会将方法绑定到类的对象。
a.b is a.b
<bound method A.b of <__main__.A object at 0x00000294E2DA1780>>
这将直接解决该方法,因为我们可以直接使用类名调用静态方法,无需创建对象来调用静态方法。
b.b is b.b
<function B.b at 0x00000294E2C49D08>
这会将方法直接绑定到类。可以直接使用类名调用该方法,而无需创建对象或对象。
c.b is c.b
<bound method C.b of <class '__main__.C'>>