Семантика __module__
Я динамически определяю функции в модуле, а затем обновляю модуль __all__
и атрибут __name__
для соответствия имени, которое оно будет иметь внутри модуля. Мне было интересно, полезно ли обновлять атрибут функции __module__
, а также указывать на модуль, в котором будет находиться функция. Документы говорят, что __module__
:
Название модуля, в котором была определена функция, или Нет, если недоступно.
Код, который создает функцию, находится в другом модуле, который практически не связан с модулем, в котором находится функция. В этом модуле нет ссылки на функцию.
Я сделал несколько попыток в списке рассылки, но я немного смущен тем, что такое семантика __module__
, и если я должен установить ее в None или модуль, в котором находится эта функция, или модуль, где код, который создал эту функцию. Оставайтесь на месте, но мне интересно узнать, знает ли кто-нибудь ответ.
Ответы
Ответ 1
Я бы этого не сделал. Импорт функций из одного модуля в другой является обычным явлением. Свойство __module__
предназначено для извлечения модуля, где была определена функция, либо для чтения исходного кода, либо для повторного импорта его в script. Я не вижу, что имеет значение, зависит ли определение от статического кода или динамически: если кто-то хочет прочитать исходный код функции, он должен посмотреть в модуль, который динамически создает его.
Вы можете посмотреть PEP 3130. Хотя он был отклонен, он может дать вам больше информации о цели __module__
, чем описание одного предложения, найденное повсюду.
Ответ 2
Вам не нужно беспокоиться о __module__
обычно, иногда его использовать для темной магии или знать, откуда пришла функция (например) отладки, но большую часть времени все игнорируют ее. Если ваш действительно обеспокоенный набор __module__ = "dynamically_defined_function"
или что-то подобное.