我有一个字符串type
,其值为“MBSquareObject”。 MBSquareObject
是名为MBObject
的文件中的类。我想动态导入MBSquareObject
。从字符串中用Python导入模块
如果正方形物体在它自己的文件,这个工程:
__import__(type)
不过,我想要做的是from MBObject import MBSquareObject
等同。但是,这不起作用:
from MBObject __import__(type)
我还能怎么做?
编辑:给出的答案假定MBSquareObject是MBObject上的某种对象,但它只是另一个类。 MBSquareObject是MBObject的一个子类,因此它们被列在同一个文件中。
编辑:由于某种原因,没有答案正在工作。下面是我有:
# this is imported at the top of the file
from MBObject import MBObject
type = 'MBSquareObject'
__import__('MBObject', globals(), locals(), [type])
object_class = eval(type)
object = object_class()
错误:NameError:名字 'MBSquareObject' 没有定义
等待对不起,我应该指定:MBSquareObject是一个类,MBObject的一个子类。他们只是放在同一个文件中。 – Snowman
@mohabitar文件叫什么?如果它被命名为'MBObject.py',那么这应该工作。在这种情况下,MBObject指的是模块名称,而不是类名称。 –
@mohabitar:在这种情况下,您需要编辑您的问题以更清楚地解释您要做的事情。 '从MBObject导入MBSquareObject'将从一个名为'MBObject'的*模块导入一个东西(类,数字,字符串等等)。你知道你想要导入的模块的名称,还是必须动态确定,如果是这样,如何? (也就是说,你是从模块中单独确定模块还是以某种方式链接?) – BrenBarn