Уважаеми експерти по 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
Има ли друг начин да направите това, без да напишете такъв дескриптор?
TIA
print(anyobject.__mro__)
(=Ред на разрешаване на метода) - person cfi   schedule 29.08.2012