Неявный импорт подмодулей пакетов в Python — плохая практика?Python

Программы на Python
Anonymous
Неявный импорт подмодулей пакетов в Python — плохая практика?

Сообщение Anonymous »

В Python, если какой-либо ранее выполненный код импортировал какой-либо подмодуль пакета, этот подмодуль становится общедоступным везде, даже если он не был явно импортирован в текущий модуль.
Этот тип функции из этого противоречит дзен Python «Явное лучше, чем неявное», и для всех, кто работает в IDE, это создаст кучу предупреждений, поскольку будет пытаться интерпретировать неявно импортированный подмодуль как атрибут пакета/модуля, а код может даже в какой-то момент спутать модуль и атрибут. .
Кроме того, никогда не знаешь, когда соседний модуль удалит явный импорт, на который вы полагаетесь, и выполнит обратную съемку.
Конечно, мы должен знать, что этот неявный импорт существует, поскольку он может помочь в отладке.
Но, кроме того, является ли эта функция просто наследием старых времен Python - есть ли какие-либо причины на самом деле использовать ее или это просто это плохая практика, и ее всегда следует избегать?
Пример кода:
import foo

# AttributeError: module 'foo' has no attribute 'bar'
# foo.bar

# NOTE: implicit import doesn't need to happen in the current module
# it could happen inside `foo` or `numpy` or inside any other package or module
# and it will make package submodule generally available without additional import
#
# which can be quiet confusing given you won't have type hints in IDE
# as IDE will treat this module as original package attribute
def implicit_import():
import foo.bar

implicit_import()

# available without explicit `import foo.bar` in global namespace
# though there will be a warning in IDE
# "bar" is not a known attribute of module "foo"
foo.bar


Подробнее здесь: https://stackoverflow.com/questions/784 ... d-practice

Вернуться в «Python»