Библиотеки и инфраструктуры обычно используют код инициализации в файлах __init__.py
, чтобы аккуратно скрыть внутреннюю структуру и предоставить единый интерфейс для пользователя.
Давайте рассмотрим пример модуля форм Django.Различные функции и классы в модуле форм определяются в разных файлах в зависимости от их классификации.
forms/
__init__.py
extras/
...
fields.py
forms.py
widgets.py
...
Теперь, если бы вам нужно было создать форму, вам нужно было бы знать, в каком файле определена каждая функция и ваш коддля создания контактной формы придется выглядеть примерно так (что неудобно и некрасиво).
class CommentForm(forms.forms.Form):
name = forms.fields.CharField()
url = forms.fields.URLField()
comment = forms.fields.CharField(widget=forms.widgets.Textarea)
Вместо этого в Django вы можете просто ссылаться на различные виджеты, формы, поля и т. д. прямо из форм.пространство имен.
from django import forms
class CommentForm(forms.Form):
name = forms.CharField()
url = forms.URLField()
comment = forms.CharField(widget=forms.Textarea)
Как это возможно?Чтобы сделать это возможным, Django добавляет следующее выражение в файл forms/__init__.py
, который импортирует все виджеты, формы, поля и т. Д. В пространство имен forms
.
from widgets import *
from fields import *
from forms import *
from models import *
Как видите, это упрощает вашижизнь при создании форм, потому что теперь вам не нужно беспокоиться о том, где определена каждая функция / класс, и просто используйте все это непосредственно из пространства имен forms
.Это только один пример, но вы можете увидеть подобные примеры в других средах и библиотеках.