以下是该方案。
我有一个类(X)有一个方法xyz
我必须定义一个扩展类(X)的类(Y),但是应该运行类Y的'xyz'而不是类X的'xyz'。
以下是示例:
Code in first.py :
class X():
def xyz(self):
-----
Code in second.py:
import first
class Y(X):
def xyz(self):
-----
实际上,我的要求是每当调用“X.xyz()”时调用“Y.xyz()”并且我不能在'first.py'中进行修改但我可以修改'second.py'。
有人可以澄清一下吗。
答案 0 :(得分:2)
你正在寻找monkeypatch。
不要创建子类,直接在xyz
上替换X
方法:
from first import X
original_xyz = X.xyz
def new_xyz(self):
original = original_xyz(self)
return original + ' new information'
X.xyz = new_xyz
也可以替换整个类,但需要提前 (在其他模块导入类之前):
import first
first.X = Y
答案 1 :(得分:0)
转换就像:
class X:
def xyz(self):
print 'X'
class Y(X):
def __init__(self,x_instance):
super(type(x_instance))
def xyz(self):
print 'Y'
def main():
x_instance = X()
x_instance.xyz()
y_instance = Y(x_instance)
y_instance.xyz()
if __name__=='__main__':
main()
将产生:
X
Y