在同一目录中交叉导入

时间:2015-12-16 08:49:50

标签: python django

我正在使用Python 3与Django,我尝试使交叉导入失败,我不知道为什么...... 结构如下:

|--my_project
   |-- system
     |--__init__.py
     |-- a.py
     |-- b.py

a.py

from .b import TestB
class TestA(object):
    pass

b.py

from .a import TestA
class TestB(object):
    pass

a.py中的导入有效。但是b.py中的那个不起作用:ImportError: cannot import name 'TestA'。我也尝试过使用绝对路径(from myproject.system.a import TestA,但没有运气)。 对这个问题有什么看法吗?

2 个答案:

答案 0 :(得分:1)

您可以使用多种方法来解决交叉导入问题:

  • 重新组织您的模块,以便不存在交叉导入,即将类放到单个模块中等。

  • $('select#exampleSelect').on('change', function() { // Make sure that `table` variable is available inside your change method table.ajax.reload(); }); 替换为from module import foo并使用全名。

  • 将导入放在模块的末尾(不推荐)。

另见JSL 18.5.1

答案 1 :(得分:0)

将导入放在a.py和b.py的末尾可以解决问题。 如果它没有帮助您尝试将导入移动到类定义块中,那么替换

from .a import TestA
Class TestB(object):
    pass

Class TestB(object):
    from .a import TestA
    pass

小建议:不要使用相对导入。