__init__.py
делает каталог пакетом Python. Он может быть пустым, или содержать код инициализации пакета, например, для импорта модулей или определения глобальных переменных, доступных при импорте пакета. Его наличие необходимо, чтобы Python мог рассматривать каталог как пакет.
Файл __init__.py
- это специальный файл в Python, который служит индикатором для Python интерпретатора о том, что каталог, в котором он находится, следует рассматривать как Python пакет (package). Даже если файл пустой, его наличие превращает обычную директорию в пакет.
Назначение:
__init__.py
может содержать код, который выполняется при первом импорте пакета. Это полезно для:
from package import module
вместо from package.subpackage import module
).__init__.py
определяет пространство имен пакета. Все переменные, функции и классы, определенные в __init__.py
, становятся доступны как атрибуты пакета.__all__
: В __init__.py
можно определить список __all__
, который указывает, какие модули и имена должны импортироваться при использовании from package import *
. Без __all__
, import *
может импортировать все имена, начинающиеся не с подчеркивания (_
), что может привести к неожиданному поведению.Пример:
Предположим, есть структура каталогов:
my_package/ ├── __init__.py ├── module_a.py └── sub_package/ ├── __init__.py └── module_b.py
В my_package/__init__.py
может быть:
# my_package/__init__.py from .module_a import my_function # Импортируем функцию из module_a __all__ = ['my_function'] # Указываем, что должно импортироваться при from my_package import *
Теперь можно импортировать my_function
непосредственно из пакета:
import my_package my_package.my_function() # Доступ к функции
Или
from my_package import * my_function()
В заключение, __init__.py
играет важную роль в организации и структурировании Python проектов, превращая каталоги в логические единицы - пакеты, и предоставляя механизм для управления тем, как эти пакеты используются.