首页 > 解决方案 > 为什么`is`对于相同的实例方法和类方法返回False,但对于静态方法返回True

问题描述

让代码来说明问题:

>>> 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

标签: python

解决方案


这会将方法绑定到类的对象。

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'>>

推荐阅读