Heim > Artikel > Backend-Entwicklung > Wie implementiert man dynamischen Attributzugriff mit __getattr__-ähnlichem Verhalten in Modulen?
So erweitern Sie ein Modul mit __getattr__-ähnlicher Funktionalität, die dynamisch Instanzen von a erstellt Klasse und ruft Methoden für sie auf, wenn auf Attribute zugegriffen wird, die nicht im Modul vorhanden sind.
Während getattr Methoden üblicherweise auf Klassen angewendet werden, ist es ist nicht direkt auf Module anwendbar. Um dies zu beheben, kann eine Wrapper-Funktion implementiert werden, um den Attributzugriff auf eine Instanz einer Substitutionsklasse umzuleiten.
<code class="python">class Wrapper: def __init__(mod): setattr(mod, '__getattr__', getattrmod)</code>
Diese Wrapper-Klasse bietet eine benutzerdefinierte getattrMethode namens getattrmod.
<code class="python">sys.modules[__name__] = Wrapper</code>
Durch Ersetzen des Moduls selbst durch den Wrapper wird jeder zukünftige Attributzugriff auf die Modul wird von der Methode getattr abgefangen.
<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>
Das obige ist der detaillierte Inhalt vonWie implementiert man dynamischen Attributzugriff mit __getattr__-ähnlichem Verhalten in Modulen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!