Семантика __module__

Я динамически определяю функции в модуле, а затем обновляю модуль __all__ и атрибут __name__ для соответствия имени, которое оно будет иметь внутри модуля. Мне было интересно, полезно ли обновлять атрибут функции __module__, а также указывать на модуль, в котором будет находиться функция. Документы говорят, что __module__:

Название модуля, в котором была определена функция, или Нет, если недоступно.

Код, который создает функцию, находится в другом модуле, который практически не связан с модулем, в котором находится функция. В этом модуле нет ссылки на функцию.

Я сделал несколько попыток в списке рассылки, но я немного смущен тем, что такое семантика __module__, и если я должен установить ее в None или модуль, в котором находится эта функция, или модуль, где код, который создал эту функцию. Оставайтесь на месте, но мне интересно узнать, знает ли кто-нибудь ответ.

Ответы

Ответ 1

Я бы этого не сделал. Импорт функций из одного модуля в другой является обычным явлением. Свойство __module__ предназначено для извлечения модуля, где была определена функция, либо для чтения исходного кода, либо для повторного импорта его в script. Я не вижу, что имеет значение, зависит ли определение от статического кода или динамически: если кто-то хочет прочитать исходный код функции, он должен посмотреть в модуль, который динамически создает его.

Вы можете посмотреть PEP 3130. Хотя он был отклонен, он может дать вам больше информации о цели __module__, чем описание одного предложения, найденное повсюду.

Ответ 2

Вам не нужно беспокоиться о __module__ обычно, иногда его использовать для темной магии или знать, откуда пришла функция (например) отладки, но большую часть времени все игнорируют ее. Если ваш действительно обеспокоенный набор __module__ = "dynamically_defined_function" или что-то подобное.