我正在使用importlib
& getattr
动态创建类的实例。但是,当我运行下面提供的Proxy.py
时,构造函数被调用两次,我得到重复的结果。提前致谢。 (Python 3.6.1)
结果
inside Cproxy contructor
inside Cproxy read()
inside Cproxy contructor
inside Cproxy read()
Runner.py
import importlib
class Crunner:
def __init__(self, nameofmodule, nameofclass):
self.run(nameofmodule, nameofclass)
def run(self, nameofmodule, nameofclass):
module = importlib.import_module(nameofmodule)
class_ = getattr(module, nameofclass)
instance = class_()
instance.read()
Proxy.py
from Runner import Crunner
class Cproxy:
def __init__(self):
print("inside Cproxy contructor")
def read():
print("inside Cproxy read()")
Crunner("Proxy", "Cproxy")
答案 0 :(得分:1)
您的代理模块已导入两次 - 一次为__main__
(当您运行python Proxy.py
时),一次为Proxy
(当Crunner
导入时)
解决方案很简单:保护对Crunner()
的调用,以便仅在Proxy
用作脚本时执行:
if __name__ == "__main__":
Crunner("Proxy", "Cproxy")