为什么同一个实例方法和类方法的返回值是 False,而静态方法的返回值是 True?

5

让代码解决问题:

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

1
因为每次使用实例方法或类方法时,它都会创建一个新的绑定方法对象,而静态方法只返回原始函数。 - juanpa.arrivillaga
可能是重复的问题:https://dev59.com/c2Yr5IYBdhLWcg3w29pI - juanpa.arrivillaga
1个回答

1

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接