Узнайте, почему файл __init__ существует в пакетах Python.
В Python есть два типа пакетов: обычные пакеты и пакеты пространства имен. Для первого требуется __init__.py
файл, а для второго нет. Любой каталог с файлом инициализации python помечается python как пакет и может быть импортирован.
Всякий раз, когда пакет импортируется с использованием import
ключевого слова или from x import y
синтаксиса, файл инициализации запускается неявно. Как правило, этот файл остается пустым, но его можно использовать для достижения следующих целей:
- Импорт подмодулей
- Инициализировать объекты/переменные верхнего уровня (регистратор, подключения к базе данных, конфигурации)
Работа с __init__.py
файлом
Во-первых, давайте создадим каталог с именем my_package
и добавим новый файл __init__.py
с этим содержимым.
print("my_package is imported")
С этой настройкой мы теперь можем проверить, my_package
можно ли импортировать, используя следующий скрипт:
import my_package
Выход:
my_package is imported
Как мы видим, как только my_package
был импортирован файл инициализации, он был запущен. Точно так же можно создать несколько подмодулей с собственным __init__.py
файлом. Например:
my_package/ ├── __init__.py ├── sub_package_1 │ └── __init__.py ├── sub_package_2 │ └── __init__.py └── sub_package_3 └── __init__.py 3 directories, 4 files
Аналогичное содержимое записывается во все файлы инициализации, как и в my_package
файл инициализации. Затем мы можем импортировать все подмодули:
from my_package import sub_package_1, sub_package_2, sub_package_3
Выход:
my_package is imported sub_package_1 is imported sub_package_2 is imported sub_package_3 is imported