我正在尝试从另一个级别的模块中导入一些类。我可以键入所有的类,但是我试图动态地做到这一点
如果我做:
from ..previous_level.module import *
raise: SyntaxError: import * only allowed at module level
与myapp文件夹中的相同:
from myapp.previous_level.module import *
raise: SyntaxError: import * only allowed at module level
所以我认为:
my_classes = ['Class_Foo', 'Class_Bar']
for i in my_classes:
from ..previous_level.module import i
raise: ImportError: cannot import name 'i'
并且:
my_classes = ['Class_Foo', 'Class_Bar']
for i in my_classes:
__import__('myapp').previous_level.module.y
raise: AttributeError: module 'myapp.previous_level.module' has no attribute 'y'
我已经尝试过
string format
,getattr()
,__getattr__
,但是没有成功。无法以这种方式导入,或者我做错了什么?
最佳答案
如果尝试从函数中导入SyntaxError: import * only allowed at module level
,则会发生*
错误。从问题中看不到这一点,但似乎原始代码有点类似:
def func():
from ..previous_level.module import * # SyntaxError
另一方面,在模块的开头导入将是有效的:
from ..previous_level.module import * # OK
也就是说,我仍然建议使用不带
*
的绝对导入:from myapp.previous_level.module import ClassA, ClassB, ClassC
x = ClassA()
# or:
import myapp.previous_level.module
x = myapp.previous_level.module.ClassA()
顺便说一句,这是完全错误的:
for i in my_classes:
from ..previous_level.module import i