运行时补丁python modu

2024-09-30 22:14:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找一种在替换导入时运行模块的方法。这将是在下面的伪代码中实现run_patched所缺少的魔力。在

from argparse import ArgumentParser

class ArgumentCounter(ArgumentParser):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        arg_counter = 0
    def add_argument(self, *args, **kwargs):
        super().add_argument(*args, **kwargs)
        arg_counter += 1
    def parse_args(self, *args, **kwargs):
        super().parse_args(*args, **kwargs)
        print(arg_counter)

run_patched('test.test_argparse', ArgumentParser = ArgumentCounter)

我知道单个方法可以被赋值代替,例如声明ArgumentParser.parse_args = print,所以我很想搞乱像sys.modules这样的全局变量,然后用runpy.run_module来执行模块。在

不幸的是,整个策略应该能够在多线程场景中工作。因此,更改应该只影响执行的模块,而程序的其他部分可以继续使用未修补的模块,就像从未接触过它们一样。在


Tags: 模块方法runselfparsedefcounterarg