Объекты модулей
231
Python ищет модуль с именем mymodule и связывает объект модуля с перемен-
ной alias в текущей области видимости. Переменная имя_переменной всегда должна
быть простым идентификатором.
Тело модуля
Тело модуля — это последовательность инструкций, содержащихся в исходном
файле модуля. Для указания того, что данный файл является модулем, не требует-
ся использовать какой-либо специальный синтаксис: любой допустимый исходный
файл Python может быть использован в качестве модуля. Инструкции, образующие
тело модуля, немедленно выполняются, когда модуль впервые импортируется в вы-
полняющуюся программу. В процессе выполнения тела модуля объект модуля уже
создан и с ним уже связана соответствующая запись в словаре sys.modules. По мере
выполнения тела модуля пространство имен (глобальное) модуля постепенно запол-
няется.
Атрибуты объектов модулей
Инструкция import создает новое пространство имен, содержащее все атрибуты
данного модуля. Для доступа к атрибутам в этом пространстве имен следует исполь-
зовать имя или псевдоним модуля в качестве префикса:
import mymodule
a = mymodule.f()
или
import mymodule as alias
a = alias.f()
Обычно атрибуты объекта модуля связываются с помощью инструкций в теле
модуля. Если инструкция в теле модуля связывает (глобальную) переменную, то свя-
зываемый объект является атрибутом модуля.
Тело модуля существует для связывания атрибутов модуля
Обычно назначением тела модуля является создание атрибутов дан-
ного модуля: инструкции def создают и связывают функции, ин-
струкции class создают и связывают классы, а инструкции при-
сваивания могут связывать атрибуты любого типа. Ради ясности
и чистоты кода следует избегать делать что-либо другое на верхнем
логическом уровне в теле кода, кроме связывания атрибутов модуля.
Атрибуты модуля можно также связывать вне тела (например, в других модулях),
обычно с использованием синтаксиса ссылок на атрибут вида M.имя (где M — любое
выражение, значением которого является модуль, а идентификатор имя — имя атри-
бута). Однако для ясности обычно лучше все же связывать атрибуты модуля в теле
собственного модуля.
Python in a Nutshell.indb 231
19.09.2018 19:03:27
Do'stlaringiz bilan baham: |