Питон против импортов №2

Оказалось, что Питон умеет в т.с. транзитивныe импорты. И это не достоинство. Обнаружил, как и в прошлый раз, в ходе рефакторинга. Иначе не поверил бы, что это реально.

+------+    +------+    +------+
| mod1 | <- | mod2 | <- | mod3 |
+------+    +------+    +------+

Когда некий символ импортируется в модуль 2, то для других модулей этот символ становится доступен к импорту из модуля 2 как будто он был там декларирован. Ну да, давай добавим дополнительную связь между модулями, офигительная же идея; инкапсуляция по Монти Пайтону, лол.

В нормальном окружении программист хочет другого:

+------+
| mod1 | <-- mod2
|      | <-- mod3
+------+

Верификация

File: pytrans/mod1.py
class Foo: pass
File: pytrans/mod2.py
from mod1 import Foo
File: pytrans/mod3.py
from mod1 import Foo as Foo1
from mod2 import Foo as Foo2
print(Foo1 is Foo2)

Результат:

> python3 mod3.py
True