Давайте это __init__.py
в пакете Python3:Почему этот код, связанный с импортом, работает в __init__.py, но не в другом .py-файле?
from .mod1 import *
from .mod2 import *
from .mod3 import *
__all__ = mod1.__all__ + mod2.__all__ + mod3.__all__
Код выглядит довольно просто и делает то, что, как ожидается: она импортирует из модулей mod1, mod2 и Mod3 все символы, которые эти модули клали в их __all__
список и то создается сводка всех трех списков __all__
.
Я попытался запустить тот же код в модуле, то есть не в __init__.py
. Он импортировал три модуля, но mod1
, mod2
и mod3
были неопределенными переменными.
(Кстати, если вы запустите pylint на оригинальном __init__.py
, вы получите эту ошибку тоже.)
То же самое утверждение from .mod1 import *
mod1
создает объект при выполнении в __init__.py
, но не создает его в другом месте. Зачем?
__init__.py
- специальный файл, но до сих пор я думал, что его имя было особенным.
Немного побочного вопроса, но: почему вы вообще это делаете? – jonrsharpe
@jonrsharpe У меня есть логический симулятор схемы с библиотекой строительных блоков, определенных в нескольких файлах. Я хочу иметь возможность просто добавить новый файл с блоками, которые будут добавлены в библиотеку. Я нашел несколько рецептов, и теперь я тестирую их и изучаю. – VPfB