我正在使用一个具有类A
和函数foo
的外部模块。该类调用其内部的函数
def foo(...):
...
class A:
def m(self, ...):
...
foo()
...
...
我需要在不编辑模块的情况下更改foo
的行为。有没有一种巧妙的方法可以做到这一点,而不需要对类A
进行子类化?
定义替换函数,然后将其分配给类函数。
def replacement_m(...):
...
from external_module import A
A.m = replacement_m
不幸的是,您不能仅仅替换foo()
,因为它不是一个类方法。您必须替换整个A.m
方法。
这被称为猴痘匹配。有关更多信息,请参阅此问题什么是猴子补丁?