Глава 6. Модули
232
Инструкция import устанавливает некоторые атрибуты модуля сразу после соз-
дания объекта модуля и до выполнения тела данного модуля. Атрибут __dict__ —
это объект словаря, который используется модулем в качестве пространства имен
для своих атрибутов. В отличие от других атрибутов модуля, словарь __dict__ не
доступен коду внутри модуля в качестве глобальной переменной. Все остальные
атрибуты в модуле являются элементами словаря __dict__ и доступны коду внутри
модуля в качестве глобальных переменных. Атрибут __name__ — это имя модуля;
атрибут __file__ — имя файла, из которого загружен модуль. В других атрибутах,
имена которых начинаются и заканчиваются двойными символами подчеркивания,
хранятся другие метаданные модуля (в версии v3 количество таких атрибутов воз-
росло во всех модулях).
Для любого объекта модуля M, любого объекта x и любого идентификатора стро-
ки S (за исключением __dict__) связывание M.S = x эквивалентно связыванию
M
.__dict__['S'] = x. Ссылка на атрибут вида M.S также в основном эквивалентна
ссылке M.__dict__['S']. Единственным отличием является то, что в тех случаях,
когда S не является ключом в словаре M.__dict__, ссылка M.__dict__['S'] возбуж-
дает исключение KeyError, тогда как ссылка M.S — исключение AttributeError.
Кроме того, атрибуты модуля доступны во всем коде модуля в качестве глобальных
переменных. Иными словами, использование S в качестве глобальной переменной
в теле модуля эквивалентно использованию M.S (т.е. M.__dict__['S']) как в от-
ношении связывания, так и ссылки (однако, если S не является ключом в словаре
M
.__dict__, то ссылка на S как на глобальную переменную возбуждает исключение
NameError).
Do'stlaringiz bilan baham: |