0

这是场景。

我有一个类(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”。

任何人都可以澄清这一点。

4

2 回答 2

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
于 2013-09-24T06:38:24.757 回答
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
于 2013-09-24T06:52:20.570 回答