Сообщить об ошибке.

Настройка доступа к атрибутам модуля в Python

Специальные имена __getattr__ и __dir__ могут использоваться для настройки доступа к атрибутам модуля. Функция __getattr__ на уровне модуля должна принимать один аргумент, который является именем атрибута, и возвращать вычисленное значение или вызывать исключение AttributeError. Если атрибут не найден в объекте модуля при обычном поиске (в объекте __getattribute__()), то функция __getattr__ ищется в модуле __dict__ перед тем, как вызвать AttributeError. Если атрибут найден, то он вызывается с именем атрибута и возвращается результат.

Функция __dir__ не должна принимать аргументов и возвращать последовательность строк, представляющих имена, доступные в модуле. Если функция __dir__ определена, то эта функция отменяет стандартный поиск функцией dir() в модуле.

Для более тонкой настройки поведения модуля (установка атрибутов, свойств и т. д.) Можно установить атрибут __class__ объекта модуля для подкласса types.ModuleType. Например:

import sys
from types import ModuleType

class VerboseModule(ModuleType):
    def __repr__(self):
        return f'Verbose {self.__name__}'

    def __setattr__(self, attr, value):
        print(f'Setting {attr}...')
        super().__setattr__(attr, value)

sys.modules[__name__].__class__ = VerboseModule

Примечание. Определение функции __getattr__ и установка атрибута __class__ влияют только на поиски, сделанные с использованием синтаксиса доступа к атрибутам - прямой доступ к глобальным объектам модуля (будь то внутри кода модуля или через ссылку на глобальный словарь модуля) не затрагивается.

Новое в Python 3.7: добавлены атрибуты модуля __getattr__ и __dir__.