Уважаемые знатоки Python 3!
с python2 можно было бы сделать следующее (я знаю, что это немного сложно, но это не главное: p):
class A(object):
def method(self, other):
print self, other
class B(object): pass
B.method = types.MethodType(A().method, None, B)
B.method() # print both A and B instances
с python3 больше нет несвязанных методов, только функции. Если я хочу такого же поведения, похоже, мне нужно ввести собственный дескриптор, например:
class UnboundMethod:
"""unbound method wrapper necessary for python3 where we can't turn
arbitrary object into a method (no more unbound method and only function
are turned automatically to method when accessed through an instance)
"""
def __init__(self, callable):
self.callable = callable
def __get__(self, instance, objtype):
if instance is None:
return self.callable
return types.MethodType(self.callable, instance)
поэтому я могу сделать:
B.method = UnboundMethodType(A().method)
B.method() # print both A and B instances
Есть ли другой способ сделать это без написания такого дескриптора?
ТИА
print(anyobject.__mro__)
(= порядок разрешения метода) - person cfi   schedule 29.08.2012