Вы можете определить глобальное имя __all__
, установленного в список или кортеж имен, чтобы ограничить то, что ввозится и какими документы инструментов обычно перечислят:
__all__ = ['function1', 'ClassName2']
Пределы __all__
имени, что from test import *
будет импорт, а также используется инструментами документации для ограничения того, что указано в качестве открытого API для данного модуля.
См import
statement документацию:
The публичные имена, определенные в модуле определяются проверки имен модуля для переменной с именем __all__
; если определено, это должна быть последовательность строк, которые являются именами, определенными или импортированными этим модулем. Имена, указанные в __all__
, считаются общедоступными и должны существовать. Если __all__
не определен, набор общедоступных имен включает все имена, найденные в пространстве имен модуля, которые не начинаются с символа подчеркивания ('_'
). __all__
должен содержать весь открытый API. Он предназначен для избежания случайного экспорта элементов, которые не являются частью API (например, библиотечные модули, которые были импортированы и использовались в модуле).
__init__
модули, которые вы проверили, почти наверняка определите __all__
последовательностей.
Вы можете также удалить имен снова из вашего модуля, при условии, ваши функции не нуждаются в доступе к глобальным именам позднее:
del sys
автодополнение IPython иначе использует всех имен, которые не начинаются с подчеркивание; автозаполнение игнорирует список __all__
, но будет игнорировать имена, такие как _sys
.
numpy.__init__
module (до версии 1.8.0) сам удаляет имена из глобального пространства имен снова:
if __NUMPY_SETUP__:
import sys as _sys
_sys.stderr.write('Running from numpy source directory.\n')
del _sys
но здесь sys
связан, как _sys
и IPython проигнорирует это имя, даже если он не был удален. numpy
также создает список __all__
в этом модуле.
В версии numpy
версии 1.8.0 и выше в этот файл добавлен оператор import sys
, и IPython предлагает его для автозаполнения, поскольку он по-прежнему является частью глобального пространства имен.
Поскольку вы смотрите на источники этих пакетов, возможно, вы можете видеть, что они делают, что мешает. – martineau
Да, изучая это, но пока не знаю – dreamwalker