我的功能如下:
ModuleA.py
Class FooClass:
def fooMethod(self):
self.doSomething()
现在我想覆盖那个方法,但是没有从该类派生并从内部调用重写方法:
ModuleB.py
from ModuleA import FooClass
def _newFooMethod(self):
if(not hasAttr(self,"varA "):
self.varA = 0
#Do some checks with varA
#CALL ORIGINAL fooMethod
FooClass.fooMethod = _newFooMethod
要了解的事情:
我无法访问FooClass。
我无法访问FooClass的实例,因为它们很多而且不在一个地方。
答案 0 :(得分:3)
您不使用继承。你所做的就是monky patching!
所以你可以做到以下几点:
ModuleB.py
from ModuleA import FooClass
# Preserve the original function:
FooClass.originalFooMethode = FooClass.fooMethode
def _newFooMethod(self):
if(not hasAttr(self,"varA "):
self.varA = 0
#Do some checks with varA
#CALL ORIGINAL fooMethod
self.originalFooMethode()
FooClass.fooMethod = _newFooMethod