sémantique de __module__
Je suis dynamiquement de définir des fonctions dans un module, puis la mise à jour du module __all__
et de la fonction __name__
attribut de faire correspondre le nom qu'il aura à l'intérieur du module. Je me demandais si c'est une bonne idée de mettre à jour la fonction du __module__
attribut en tant que bien à point pour le module de la fonction de résidence. Les docs disent __module__
est:
Le nom du module de la fonction a été définie, ou None si indisponible.
Le code qui crée la fonction réside dans un autre module qui est à peu près sans rapport avec le module où la fonction réside. Il n'y a pas de référence à la fonction de ce module.
J'ai fait fouiller sur la liste de diffusion mais je suis un peu confus quant à ce que la sémantique de __module__
sont et si je dois le régler à Aucun ou le module de la fonction réside ou le module où le code réside qui a créé la fonction. Vais le laisser être, pour l'instant, mais je suis curieux de voir si quelqu'un connaît la réponse.
source d'informationauteur Jason Keene
Vous devez vous connecter pour publier un commentaire.
Je ne le ferais pas. L'importation de fonctions à partir d'un module à un autre est un phénomène fréquent. Le
__module__
propriété est conçue pour récupérer le module où la fonction a été définie, que ce soit pour lire le code source, ou parfois de l'importer à nouveau dans un script. Je ne vois pas que cela fait une grande différence à savoir si la définition est par l'intermédiaire de code statique ou dynamique: Si quelqu'un veut lire votre fonction du code source, ils devraient regarder dans le module qui crée dynamiquement.Vous pouvez prendre un coup d'oeil à PEP 3130. Même si elle a été rejetée, il peut vous donner plus de perspicacité dans le but de
__module__
que la seule phrase de description que l'on trouve partout ailleurs.Vous ne devriez pas avoir à vous soucier de
__module__
généralement, il est parfois utilisé pour la magie noire, ou de savoir où une fonction est venu (exemple) le débogage, mais la plupart du temps tout le monde l'ignore. Si votre vraiment inquiet ensemble__module__ = "dynamically_defined_function"
ou quelque chose de similaire.