覆盖另一个文件中的类的方法

时间:2016-04-24 15:09:57

标签: python class override

说我有两个文件, file1.py file2.py 。在 file1.py 中,我定义了两个类,一个继承自另一个:

file1.py:

class Class1:
    def __init__(self):
        pass

    def func1(self):
        return "Hello world!"

class Class2(Class1):
    def __init__(self):
        pass

    def func2(self):
        return self.func1()

现在我可以从func1()拨打func2()Class2

file2.py:

import file1

class Class3(file1.Class2):
    def __init__(self):
        pass

问题:如何更改 file2.py func1()的{​​{1}},以便{{1}中的Class1 }}返回与func2()相同的内容?

所以不喜欢这样:

Class2

2 个答案:

答案 0 :(得分:2)

会覆盖func1吗?

class Class(file1.Class2):
    def func1(self):
        print "Class3.func1"

c = Class3()
c.func2()

由于func2中未定义Class3,因此会调用Class2.func2。但是,在该函数的正文中,self仍然是Class3的实例,因此self.func1()调用Class3.func1,而不是Class1.func1。这与

不同
d = Class2()
d.func2()

self中的Class2.func2Class2的实例。 Class2未定义func1,因此调用Class1.func1

答案 1 :(得分:1)

我想你想要monkeypatch Class1.func1

c2 = Class2()
print(c2.func2())
Hello world!

def new_func1(self):
    return "Another string"

Class1.func1 = new_func1  # This is monkey patching.

print(c2.func2())
Another string

但这可能会破坏使用Class1Class2的其他代码。