python - 为什么 `is` 对相同的实例方法和类方法返回 False,但对静态方法返回 True

标签 python

让代码来说明问题:

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

最佳答案

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

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>

这会将方法直接绑定(bind)到一个类。您可以直接使用类名调用该方法,而无需创建对象或使用对象。
c.b is c.b
<bound method C.b of <class '__main__.C'>>

关于python - 为什么 `is` 对相同的实例方法和类方法返回 False,但对静态方法返回 True,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61925845/

相关文章:

python - 选择字符串作为随机种子对输出的影响

python - 什么是 'rect style object' 以及如何将其实现到我的代码中?

python - 具有私有(private)开发的依赖项的 Pylons 应用程序部署

python - 我可以传递包含 '#' 的 Python 命令行参数吗? (不逃?)

python - 将 pandas 系列中的值分开并将它们全部堆叠到列表中?

python - Bokeh on_click 函数仅在整个函数完成后才更改文本

python - 如何从 Python 中的文件路径中提取文件夹路径?

python - 内化设置语言重定向 View 。如何重定向到同一页面?

Python/Selenium 点击 <div class ="foo' >

python - 文件数量达到 100 后自动删除旧文件