【发布时间】:2014-11-09 03:49:27
【问题描述】:
Python 2.7 中以下代码的结果让我感到矛盾。 is 运算符应该与对象标识一起使用,id 也是如此。但是当我查看用户定义的方法时,他们的结果会有所不同。这是为什么呢?
py-mach >>class Hello(object):
... def hello():
... pass
...
py-mach >>Hello.hello is Hello.hello
False
py-mach >>id(Hello.hello) - id(Hello.hello)
0
我发现以下Python data model 描述的摘录有些有用。但这并没有真正说明一切。用户自定义方法对象每次都重新构造,为什么id函数返回的都是同一个整数?
如果该属性是用户定义的函数对象,未绑定的用户定义的方法对象或类,则可以在获取类的属性(可能通过该类的实例)时创建用户定义的方法对象方法对象。当属性是用户定义的方法对象时,仅当从中检索它的类与存储在原始方法对象中的类相同或派生类时,才会创建新的方法对象;否则,原样使用原始方法对象。
【问题讨论】:
-
@user2357112 -- 我认为 OP 理解这部分“如果用户定义的方法对象每次都重新构造,为什么
id函数返回相同的整数?”。更好的欺骗是stackoverflow.com/q/3877230/748858 -
@mgilson:是的,这就是我重新打开的原因。我需要停止如此仓促地使用dupehammer。
-
@user2357112 -- 我更喜欢它,因为它需要更多 4 人同意我的观点,认为这是一个骗局 -- 这些天我更不愿意把这个骗子打倒...
标签: python python-2.7 identity equality