我正在尝试从另一个级别的模块中导入一些类。我可以键入所有的类,但是我试图动态地做到这一点

如果我做:

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 formatgetattr()__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

10-06 01:50