Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从包中获取类_Python - Fatal编程技术网

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对象。那就用它吧。