Python 从包中获取类
我正在尝试使用函数Python 从包中获取类,python,Python,我正在尝试使用函数\uuu import\uu(…)和getattr(…)来创建位于模块内部的类的对象。该模块本身包含在一个包中 该类名为TestScript。它位于名为TestScript.py的文件中。该文件位于名为TestScripts的文件夹中。因此,根据我对python的理解,文件TestScript.py被解释为模块,文件夹TestScripts被解释为包 所以,我试着这样做: moduleName = 'TestScripts.TestScript' className = 'Te
\uuu import\uu(…)
和getattr(…)
来创建位于模块内部的类的对象。该模块本身包含在一个包中
该类名为TestScript
。它位于名为TestScript.py
的文件中。该文件位于名为TestScripts
的文件夹中。因此,根据我对python的理解,文件TestScript.py
被解释为模块,文件夹TestScripts
被解释为包
所以,我试着这样做:
moduleName = 'TestScripts.TestScript'
className = 'TestScript'
module = __import__(moduleName)
targetClass = getattr(module, className)
instance = targetClass()
但AttributeError出现在消息“模块'TestScript'没有属性'TestScript'”中
在执行此代码段之后,我希望
实例
成为TestScript
类的对象。我错过了什么?有关详细说明,请参见
要使您的代码符合您的要求,请执行以下操作:
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文档强烈反对直接使用uuu导入uuu您试图从Testscript复制
。Testscript导入TestClass
?您的示例与您的描述不匹配。您编写了一个名为TestScript.py
的模块,但在您的示例中,您尝试导入的TestScripts.Script1
。首先,为什么要使用\uuuuuuuuuuuuuuuuuuuuuuuu
?听起来你可能有一个问题。其次,对于\uuuu import\uuuuu
如何处理包的子模块,您遇到了一个常见的困惑(这非常令人困惑)。简而言之,要执行所需操作,必须传递一个非空的fromlist
参数。我同意Villius和Iguanaaut的观点,似乎缺少文件夹名:from package.filename(module)import对象。那就用它吧。