semántica de __module__

Estoy definiendo dinámicamente las funciones en un módulo y luego actualizando el __all__ del módulo y el atributo __name__ la función para que coincida con el nombre que tendrá dentro del módulo. Me preguntaba si es una buena idea actualizar el atributo __module__ la función y señalar al módulo en el que residirá la función. Los documentos dicen que __module__ es:

El nombre del módulo en el que se definió la función, o Ninguno si no está disponible.

El código que crea la función reside en un módulo diferente que no está relacionado con el módulo donde reside la función. No hay referencia a la función en este módulo.

He __module__ un poco en la lista de correo, pero estoy un poco confundido en cuanto a qué es la semántica de __module__ y si debo configurarlo como Ninguno o el módulo en el que reside la función o el módulo en el que reside el código que creó. la función. Voy a dejarlo por ahora, pero estoy interesado en ver si alguien sabe la respuesta.

Yo no lo haria Importar funciones de un módulo a otro es una ocurrencia común. La propiedad __module__ está diseñada para recuperar el módulo donde se definió la función, ya sea para leer el código fuente o, a veces, para volver a importarlo en un script. No veo que haga mucha diferencia si la definición es a través de código estático o dinámicamente: si alguien quiere leer el código fuente de su función, debe buscar en el módulo que lo crea dinámicamente.

Podrías echar un vistazo al PEP 3130 . Aunque fue rechazado, podría darle más información sobre el propósito de __module__ que la descripción de una sola frase que se encuentra en cualquier otro lugar.

No debería tener que preocuparse por __module__ normalmente, a veces se usa para la magia oscura o saber de dónde viene una función (ejemplo) de depuración, pero la mayoría de las veces, todos la ignoran. Si realmente está preocupado, establezca __module__ = "dynamically_defined_function" o algo similar.