以这个文件1为例:
def _foo_prn():
print("file1::foo.prn")
class foo(object):
def prn(self):
_foo_prn()
我想以某种方式实例化 file2 中的 foo
但覆盖 _foo_prn
并获得此输出,例如:
def _foo_prn():
print("This is my preferred output.")
myfoo = foo()
myfoo.prn()
# Output: This is my preferred output.
这可能吗? 或者我必须重写这个类?
注意:file1 在我用 pip 安装的包中。所以我无法对其进行修改。
答案 0 :(得分:1)
您可以使用“monky patching”来保存前一个函数的状态。
import Foo
foo =Foo()
foo._foo_prn = _foo_prn
foo.prn() #this is call the overridden method
答案 1 :(得分:0)
你可以让 _foo_prn
成为一个类方法,然后在 myfoo
上进行monkeypatch:
class Foo:
def prn(self):
self._foo_prn()
def _foo_prn(self):
print("file1::foo.prn")
def _foo_prn():
print("This is my preferred output.")
myfoo = Foo()
myfoo._foo_prn = _foo_prn
myfoo.prn()