python - 从包中获取类
问题描述
我正在尝试使用这些函数__import__(...)
并getattr(...)
创建一个位于模块内的类的对象。该模块本身包含在一个包中。
该类名为TestScript
. 它位于一个名为TestScript.py
. 该文件位于名为TestScripts
. 所以根据我对python的理解,文件TestScript.py
被解释为模块,文件夹TestScripts
被解释为包。
所以,我这样尝试:
moduleName = 'TestScripts.TestScript'
className = 'TestScript'
module = __import__(moduleName)
targetClass = getattr(module, className)
instance = targetClass()
但是 AttributeError 出现消息“模块'TestScripts'没有属性'TestScript'”。
在执行此代码片段后,我希望instance
成为该类的对象。TestScript
我想念什么?
解决方案
有关完整说明,请参阅__import__
为了让你的代码做你想做的事:
moduleName = 'Testscripts.TestScript'
className = 'TestClass'
module = __import__(moduleName) #could use fromlist here as @Iguananaut suggests
targetModule = getattr(module, "TestScript")
targetClass = getattr(targetModule, className)
instance = targetClass()
作为说明 - python 文档强烈反对直接使用__import__