Оказалось, что Питон умеет в т.с. транзитивныe импорты. И это не достоинство. Обнаружил, как и в прошлый раз, в ходе рефакторинга. Иначе не поверил бы, что это реально.
+------+ +------+ +------+
| mod1 | <- | mod2 | <- | mod3 |
+------+ +------+ +------+
Когда некий символ импортируется в модуль 2, то для других модулей этот символ становится доступен к импорту из модуля 2 как будто он был там декларирован. Ну да, давай добавим дополнительную связь между модулями, офигительная же идея; инкапсуляция по Монти Пайтону, лол.
В нормальном окружении программист хочет другого:
+------+
| mod1 | <-- mod2
| | <-- mod3
+------+
class Foo: pass
from mod1 import Foo
from mod1 import Foo as Foo1
from mod2 import Foo as Foo2
print(Foo1 is Foo2)
Результат:
> python3 mod3.py
True
2024.05.14 in python