重写另一个文件中类的方法



假设我有两个文件,file1.pyfile2.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()并从Class2 func2().

file2.py:

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

问:如何在 file2.py 中更改Class1 func1(),以便Class2中的func2()返回与func1()相同的内容?

所以不是这样的:

class Class3(file1.Class2):
    ...
    def func1(self):
        return "Another string"

我想你想猴子补丁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 的代码。

覆盖

func1行吗?

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

因为func2Class3中没有定义,所以Class2.func2被调用。但是,在该函数的主体中,self仍然是Class3的实例,因此self.func1()调用Class3.func1,而不是Class1.func1。这与

d = Class2()
d.func2()

其中Class2.func2中的selfClass2 的实例。 Class2没有定义func1,所以Class1.func1被称为。

最新更新