Круговой импорт вызывает проблемы, но в Python есть способы его уменьшения.
Проблема в том, что при запуске python a.py
он запускает a.py
, но не помечает его как импортированный как модуль. Так что в свою очередь a.py
-> модуль импорта b -> модуль импорта a -> модуль импорта b. Последний импортирует no-op, так как b в настоящее время импортируется, и Python защищает от этого. А пока b пустой модуль. Поэтому, когда он выполняет b.hi()
, он ничего не может найти.
Обратите внимание, что b.hi()
, который был выполнен, находится во время a.py
-> модуль b -> модуль a, а не в a.py
напрямую.
В вашем конкретном примере вы можете просто запустить python -c 'import a'
на верхнем уровне, поэтому первое выполнение a.py
регистрируется как импорт модуля.