У меня возникла ошибка, связывающая метод с одного объекта на другой.Метод привязки одного объекта к другому
Простая догадка о том, что происходит ... Я считаю, что ошибка, которую я получаю, связана с тем, что метод коры все еще связан с исходным объектом. Поэтому в функцию hd.bark() вставляются два элемента self.
EDIT:
Моя цель здесь поддерживать buissness логику «после функции обработки» аа стратегии загрузки данных в то время как замена объектов стратегии ... Я знаю, что это не очень хорошая практика, пока это небольшой хак, чтобы получить некоторые из командной строки функциональность
import types
from copy import deepcopy
class Dog(object):
def bark(self):
print 'bark bark bark'
class Husky(object):
def bark(self):
print 'ruff ruff'
def borderBark(self):
print 'border bark'
d = Dog()
d.bark()
h = Husky()
h.bark()
b = Dog()
b.bark = types.MethodType(borderBark,b)
b.bark()
hd = Husky()
bark = types.MethodType(deepcopy(d.bark),None, Husky)
print d.bark
print bark
hd.bark = types.MethodType(bark,hd,Husky)
print hd.bark
hd.bark()
Выходы:
bark bark bark
ruff ruff
border bark
<bound method Dog.bark of <__main__.Dog object at 0x000000004D9EC0B8>>
<unbound method Husky.bark>
<bound method Husky.bark of <__main__.Husky object at 0x00000000599616D8>>
Traceback (most recent call last):
File "<ipython-input-50-1279b42a4bd2>", line 29, in <module>
hd.bark()
TypeError: bark() takes exactly 1 argument (2 given)
Это не для меня ясно, что вы пытаетесь достичь. Кроме того, является 'borderBark' частью' класса Husky'? – sal
Я обезьяна исправляю функцию во время выполнения и заменяю метод, выделенный в другой части кода. Т.е. это так, что я могу использовать одну и ту же функцию для работы, но иметь возможность менять данные, которые я использую. – CodeMode
Спасибо, что посмотрели :) – CodeMode