сделали локальные импорты. И это пиздец. В очередной раз убеждаюсь, что это - язык, собранный из костылей, которые обмотали синей изолентой, чтобы они не развалились, и подпёрли ещё костылями, чтобы оно не рухнуло из-за смещённого центра тяжести.
Если модуль A импортирует B, а B импортирует C, а C импортирует A, то это называется циклический импорт. И Питон ломается, потому что import - это команда, а не просто информация к сведению. Типа "прочитай вооон тот файлик прямо, блять, сейчас". А если он в процессе чтения файлика A читает B, а в процессе чтения B читает C, и тут его просят опять прочитать A, он говорит, что разработчик ебанулся. Но он делает это со свойственной ему самобытностью. Зачем перегружать человека лишней информацией о циклическом импорте? Просто скажи ему, что не можешь импортировать какой-то из этих классов, и этого будет достаточно, программисты же, сука, телепаты!
Но если очень хочется так импортировать, то есть костылик: кому-то из этих модулей придётся импортировать другой модуль не в первых строчках себя, а где-нибудь внутри функции, чтобы команда импорта исполнилась когда-нибудь потом, не при запуске программы.
Что делать с тайп-хинтами, которые пишутся в определениях методов, спросишь ты? А ничего! Тут тоже есть костылик: "forward reference". Оборачиваешь имя типа в одинарные кавычки, и тогда Питон не ругается, что не знает такой херни. То есть фактически тайп-хинт перестаёт работать, но он есть, чтобы разработчик видел.
И эти люди ругают PHP...
Да что то ниочем, тайпхинты обычно интерфейсы содержат, это не проблема, импорты - удобная вещь, а если у тебя циклические зависимости в пределах одного класа то это говорит что ты что то делаешь не так, и питон тут не причем Вообще не сторонник питона, но конкретно эти проблемы высосаны из пальца
Обсуждают сегодня