Это старый вопрос, но Python эволюционировал и, похоже, стоит на него указать:
в Python 3 больше нет <unbound method C.x>
, поскольку несвязанный метод - это просто <function __main__.C.x>
!
Что, вероятно, означает, что код в исходном вопросе не следует рассматривать / что / выкл. Во всяком случае, Python всегда занимался печатью уток, не так ли ?!
Refs:
Альтернативное решение в Py2
Обратите внимание, что существует также альтернативное решение "исследовательского" вопроса (см. Python: Bind a Unbound Method? ):
In [6]: a = A.a.im_func.__get__(B(), B)
In [7]: a
Out[7]: <bound method B.a of <__main__.B instance at 0x7f37d81a1ea8>>
In [8]: a(2)
2
Ref:
Некоторые примеры кода ipython
питон 2
In [1]: class A():
def a(self, a=0):
print a
...:
In [2]: A.a
Out[2]: <unbound method A.a>
In [3]: A.a.im_func
Out[3]: <function __main__.a>
In [4]: A.a(B())
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-4-7694121f3429> in <module>()
----> 1 A.a(B())
TypeError: unbound method a() must be called with A instance as first argument (got B instance instead)
питон 3
In [2]: class A():
def a(self, a=0):
print(a)
...:
In [3]: def a():
...: pass
...:
In [4]: class B():
...: pass
In [5]: A.a(B())
0
In [6]: A.a
Out[6]: <function __main__.A.a>