2011-03-21 35 views
9
>>> class foo(object): 
...  def test(s): 
...   pass 
... 
>>> a=foo() 
>>> a.test is a.test 
False 
>>> print a.test 
<bound method foo.test of <__main__.foo object at 0x1962b90>> 
>>> print a.test 
<bound method foo.test of <__main__.foo object at 0x1962b90>> 
>>> hash(a.test) 
28808 
>>> hash(a.test) 
28808 
>>> id(a.test) 
27940656 
>>> id(a.test) 
27940656 
>>> b = a.test 
>>> b is b 
True 
+0

对不起,什么? – Mat 2011-03-21 22:45:39

回答

7

它们在运行时绑定;每次访问对象上的属性都会重新引用该方法。当你将两者都放在同一行时,他们不同的原因是第一个方法在第二个方法被绑定时没有被释放。

+8

换句话说,'id'每次看起来都是一样的,因为之前的实例在打印结果后立即被gc'd处理过,并且该特定版本的CPython中的内存管理恰好足够可预测,以使下一个对象处于相同的状态地点。 – delnan 2011-03-21 23:02:45

+0

哈哈它从来没有想过我GC将重新定位在同一地址。谢谢这一切都是有道理的。 – 2011-03-23 03:45:03

相关问题