Beim Zugriff auf Attribute eines Moduls besteht das typische Verhalten darin, statisch definierte Attribute abzurufen. Was aber, wenn wir einen Mechanismus wünschen, um dynamisch Instanzen einer Klasse innerhalb des Moduls zu erstellen und Methoden dieser Klasse aufzurufen, wenn auf Attribute zugegriffen wird?
Um dies zu erreichen, müssen wir zwei Hindernisse überwinden:
Um beide Einschränkungen zu umgehen, verwenden wir einen Wrapper, der jedes Mal dynamisch eine neue Instanz der gewünschten Klasse erstellt, wenn eine Attributsuche fehlschlägt:
<code class="python">def __getattr__(mod, name): return getattr(A(), name)</code>
In dieser Implementierung ist „A“. die Klasse innerhalb des Moduls, auf deren Methoden wir zugreifen möchten. Diese Lösung kann jedoch aufgrund der Erstellung mehrerer Instanzen und der Umgehung von Globals zu geringfügigen Verhaltensunterschieden führen.
Alternativ können wir die Importmaschinerie von Python verwenden, um Ersetzen Sie das Modul selbst durch eine Instanz der gewünschten Klasse.
<code class="python">class Foo: def funct1(self, args): <code> sys.modules[__name__] = Foo()</code>
Diese Technik ermöglicht es uns effektiv, getattr und andere Metamethoden auf dem Modul zu verwenden.
Durch das Verständnis dieser Techniken können wir die Funktionalität von Modulen erweitern, um den dynamischen Methodenaufruf und das Hinzufügen einzuschließen Flexibilität zu unserem Code.
Das obige ist der detaillierte Inhalt vonWie können wir Klassenmethoden für Module in Python dynamisch aufrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!