Почему связанные методы экземпляра в ссылке на Python не равны? - PullRequest
9 голосов
/ 22 марта 2011
>>> 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

1 Ответ

7 голосов
/ 22 марта 2011

Они связаны во время выполнения; при доступе к атрибуту объекта метод каждый раз перепривязывается заново. Причина, по которой они отличаются, когда вы помещаете оба в одну строку, заключается в том, что первый метод еще не был выпущен к моменту, когда второй связан.

...