奇怪:调用 python 方法使其 运行 两次

Weird: Calling python method makes it run twice

任何人都可以向我解释为什么方法 运行 运行s 两次使用此代码:

import importlib
import sys


def load(module, className):
    if module not in sys.modules:
        module = importlib.import_module(module)
    else:
        module = sys.modules[module]

    loaded_class = getattr(module, className)
    return loaded_class()

class P:
    pass

class A:
    def run(self, **kwargs):
        print("s", kwargs)  # this runs twice


cc = load("app.tests.manual.wf", "A")
cc.run(event=P())

加载模块然后调用class方法。它应该 运行 一次但是它 returns:

s {'event': <app.tests.manual.wf.P object at 0x7fc42f2b1450>}
s {'event': <__main__.P object at 0x7fc42f29bc50>}

使用importlib.import_module(模块)导入时运行一次(因为您没有像if __name__ == '__main__':那样将最后几行设为条件)

作为常规代码的一部分运行第二次。

您可以看到这一点,因为输出中的两个模块名称 app.tests.manual.wf__main__ 不同。