Pour étendre un module avec une fonctionnalité de type __getattr__ qui crée dynamiquement des instances d'un classe et invoque des méthodes sur celles-ci lors de l'accès à des attributs qui n'existent pas dans le module.
Bien que les méthodes getattr fonctionnent généralement sur les classes, elles n'est pas directement applicable aux modules. Pour résoudre ce problème, une fonction wrapper peut être implémentée pour rediriger l'accès aux attributs vers une instance d'une classe de substitution.
<code class="python">class Wrapper: def __init__(mod): setattr(mod, '__getattr__', getattrmod)</code>
Cette classe wrapper fournit un getattr méthode appelée getattrmod.
<code class="python">sys.modules[__name__] = Wrapper</code>
En remplaçant le module lui-même par le wrapper, tout futur accès aux attributs sur le Le module sera intercepté par la méthode getattr.
<code class="python">def getattrmod(mod, attr): # Create an instance of the substitution class instance = Class() # Invoke the method with the same name as the missing attribute return getattr(instance, attr)</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!