Форма from ... import *
в основном предназначена для удобного интерактивного использования при подсказке переводчика: вам не рекомендуется использовать ее в других ситуациях, поскольку она не даст вам ничего, кроме проблем.
На самом деле, внутреннее руководство по стилю у моего работодателя идет дальше, рекомендуя всегда импортировать модуль, а не содержимое из модуля (модуль из пакета в порядке и на самом деле рекомендуется). В результате в нашей кодовой базе ссылки на импортированные вещи всегда являются квалифицированными именами (themod.thething
) и никогда не являются голыми именами (которые всегда ссылаются на встроенные, глобальные переменные этого же модуля или локальные); это делает код намного более понятным и более читаемым, а также избегает всех видов тонких аномалий.
Конечно, если имя модуля слишком длинное, предложение as
в импорте, чтобы дать ему более короткий и удобный псевдоним для целей импортирующего модуля, подойдет. Но с вашими однобуквенными именами модулей это не понадобится; -).
Итак, если вы следуете руководству и всегда импортируете модуль (а не вещи из него), c.v1
всегда будет ссылаться на то же, что и a.v1
и b.v1
, и для получения, и для установки: вот одна потенциальная тонкая аномалия, которую можно избежать сразу же! -)
Запомните самый последний бит дзен Python (выполните import this
в приглашении переводчика, чтобы увидеть все это):
Namespaces are one honking great idea -- let's do more of those!
Импорт всего модуля (не кусочков и кусочков внутри него) сохраняет его целостность в качестве пространства имен, как и всегда ссылки на вещи внутри импортируемого модуля с помощью точных (пунктирных) имен. Одна гудящая отличная идея: сделай больше! -)