Zusätzliche Methoden an vorhandene Python-Objekte anhängen
In Python ist es im Allgemeinen nicht ratsam, die Methoden vorhandener Objekte zu ändern, aber in bestimmten Situationen , es kann notwendig sein. In diesem Artikel wird erläutert, wie Methoden zu Instanzen hinzugefügt werden, nachdem diese erstellt wurden, wobei der Unterschied zwischen Funktionen und gebundenen Methoden hervorgehoben wird.
Funktion vs. gebundene Methode verstehen
In Python , Funktionen sind ungebunden, während gebundene Methoden einer bestimmten Instanz zugeordnet sind. Beim Aufruf einer gebundenen Methode wird die Instanz automatisch als erstes Argument übergeben. Diese Bindung erfolgt, wenn die Methode in der Klassendefinition definiert wird.
Aktualisieren von Methoden auf Klassenebene
Das Ändern von auf Klassenebene definierten Methoden ist unkompliziert. Sie können dem Methodenattribut der Klasse einfach eine neue Funktion zuweisen:
class A: def bar(self): print("bar") A.fooFighters = fooFighters
Diese Änderung gilt für alle Instanzen der Klasse, einschließlich vorhandener.
Instanz hinzufügen- Spezifische Methoden
Das Anhängen von Methoden an einzelne Instanzen ist komplexer. Wenn Sie eine Funktion direkt einem Attribut einer Instanz zuweisen, wird keine gebundene Methode erstellt, was zu einem Fehler führt, wenn sie ohne Argumente aufgerufen wird.
Um eine gebundene Methode für eine einzelne Instanz zu erstellen, können wir die MethodType-Funktion von verwenden das Typenmodul:
import types a.barFighters = types.MethodType(barFighters, a)
Wenn nun a.barFighters() aufgerufen wird, ist die Methode an die a-Instanz gebunden und kann ohne weitere Schritte aufgerufen werden Argumente.
Beibehaltung der Instanzisolation
Es ist wichtig zu beachten, dass das Ändern instanzspezifischer Methoden keine Auswirkungen auf andere Instanzen derselben Klasse hat. Jede Instanz verwaltet ihren eigenen Satz von Attributen, einschließlich Methoden.
Das obige ist der detaillierte Inhalt vonWie kann ich neue Methoden zu vorhandenen Python-Objekten hinzufügen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!