0
我遇到了将一个对象从一个对象绑定到另一个对象的错误。将一个对象绑定到另一个对象
一个简单的猜测是什么发生了...我相信我得到的错误是由于树皮方法仍然被绑定到原始对象。因此,将两个自我插入到hd.bark()函数中。
编辑:
我的目标是维持AA数据加载策略的“后处理功能”的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)
找到不受约束的方法目前尚不清楚对我来说,你正在努力实现的目标。另外,是'Husky'级的'borderBark'部分? – sal
我是在运行时修补一个函数的猴子,并且在代码的另一部分换出了一个分配的方法。也就是说,我可以使用相同的功能来完成工作,但能够交换我正在使用的数据。 – CodeMode
谢谢你的看法:) – CodeMode