首页 > 解决方案 > 从包中获取类

问题描述

我正在尝试使用这些函数__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我想念什么?

标签: python

解决方案


有关完整说明,请参阅__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__


推荐阅读