说我有两个文件, 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
答案 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.func2
是Class2
的实例。 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
但这可能会破坏使用Class1
或Class2
的其他代码。