如果coolLibrary.originalclass
对其自身有明确的引用:
# coolLibrary.py
class originalclass:
def foo(self):
print('original foo')
def bar(self):
originalclass.foo(self)
以使:
# main.py
import coolLibrary
class myclass(coolLibrary.originalclass):
def foo(self):
print('custom foo')
myclass().bar()
输出:
original foo
在定义自定义类之后,您可以使用自定义类修补coolLibrary.originalclass
:
coolLibrary.originalclass = myclass
因此:
myclass().bar()
然后输出:
custom foo
演示:https://replit.com/@blhsing1/JollyHumiliatingTabs
请注意,修补原始类会使行为发生全局更改.如果也使用coolLibrary.originalclass
的另一个模块依赖于其原始行为才能工作,则您可能希望将补丁仅应用于需要此类自定义行为的代码块.这可以通过unittest.mock.patch
上下文管理器来完成:
from unittest.mock import patch
with patch('coolLibrary.originalclass', myclass):
myclass().bar()