python - 为什么`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
解决方案
这会将方法绑定到类的对象。
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'>>
推荐阅读
- json - 如何将 json 对象数组解析为自定义 XML (node.js)
- amazon-web-services - 使用 CDK 创建 RDS Proxy 和 RDS 集群第一次失败
- kotlin - Intellij 显示 build.gradle.kts 中的每一行都是红色的
- amazon-web-services - 如何将 Lambda 函数的结果发布到跨账户 Kinesis Stream
- node.js - 反应错误:TypeError:无法读取属性'concat' of null after
- bash - shell 配置文件是否有环境变量?
- database - 从源代码构建 GridDB CE v4.6 的问题
- haskell - 纯粹的独特性
- java - 有没有办法将 csv 字符串剥离为 40 个字符,并在使用正则表达式的最后一个逗号之后删除任何内容?
- json - Jackson多态反序列化和序列化