如何在Python中绕过一个方法..?

时间:2013-09-24 06:29:32

标签: python

以下是该方案。

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

有人可以澄清一下吗。

2 个答案:

答案 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