На этом шаге мы рассмотрим решение этой задачи.
Вам нужен полный контроль над именами, которые экспортируются из модуля или пакета, когда пользователь применяет инструкцию from module import *.
Определите переменную __all__ в вашем модуле, где явно перечислите экспортируемые имена. Например:
# somemodule.py def spam(): pass def grok(): pass blah = 42 # Экспортирует только 'spam' и 'grok' __all__ = ['spam', 'grok']
Хотя использование from module import * не поощряется, это все еще часто встречающийся прием при работе с модулями, в которых определено очень много имен. Если вы ничего не предпримете, эта форма будет экспортировать все имена, которые не начинаются с нижнего подчеркивания. С другой стороны, если вы определите __all__, то только явно перечисленные в ней имена будут экспортированы.
Если вы определите __all__ как пустой список, ничего экспортироваться не будет. Если __all__ содержит неопределенные имена, то будет возбуждено исключение AttributeError.
На следующем шаге мы рассмотрим импортирование подмодулей пакета с использованием относительных имен.