奇怪:调用 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__
不同。
任何人都可以向我解释为什么方法 运行 运行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__
不同。