2015-12-16 3 views
0

Я использую Python 3 с Django, и я пытаюсь сделать кросс-импорт, который терпит неудачу, и я не знаю, почему ... Вот структура:Cross импорта в том же каталоге

|--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, но не повезло). Есть идеи по поводу проблемы?

ответ

0

Ввод импорта в конце ваших a.py и b.py должен исправить проблемы. Если это не поможет, вы пытаетесь переместить импорт в блок определения класса, поэтому заменить

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

в

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

небольшого предложение: не использовать относительный импорт.

1

Там уже несколько подходов, которые можно использовать для решения проблемы кросс-импорт:

  • реорганизовать свои модули так, чтобы не вы не кросс-импорта, то есть положить классы в одном модуле и т. д.

  • Замените from module import foo на import module и используйте полные имена.

  • Поместите импорт в конце модулей (не рекомендуется).

См. Также Circular imports in Python.

Смежные вопросы