Zugriff auf Instanzmethoden
In Python gibt es für Objekte zwei Arten von Methoden: Funktionen und gebundene Methoden. Gebundene Methoden sind einer bestimmten Instanz zugeordnet und übergeben die Instanz beim Aufruf als erstes Argument. Funktionen hingegen sind ungebunden und können jederzeit geändert werden.
Um den Unterschied zu veranschaulichen:
def foo(): print("foo") class A: def bar(self): print("bar") a = A() print(foo) # <function foo at 0x00A98D70> print(a.bar) # <bound method A.bar of <__main__.A instance at 0x00A9BC88>>
Methoden zu Klassendefinitionen hinzufügen
Sie können Klassendefinitionen ändern, um neue Methoden für alle Instanzen hinzuzufügen. Im Folgenden wird beispielsweise eine fooFighters-Methode zur A-Klasse hinzugefügt:
def fooFighters(self): print("fooFighters") A.fooFighters = fooFighters a2 = A() a2.fooFighters() # fooFighters # Also affects previously defined instances a.fooFighters() # fooFighters
Methoden zu einzelnen Instanzen hinzufügen
Das Hinzufügen von Methoden zu einzelnen Instanzen ist komplexer. Der folgende Versuch schlägt fehl, weil die Funktion nicht an die Instanz gebunden ist:
def barFighters(self): print("barFighters") a.barFighters = barFighters a.barFighters() # TypeError: barFighters() takes exactly 1 argument (0 given)
Um die Funktion zu binden, verwenden Sie die MethodType-Funktion aus dem Typenmodul:
import types a.barFighters = types.MethodType(barFighters, a) a.barFighters() # barFighters # Other instances unaffected a2.barFighters() # AttributeError: A instance has no attribute 'barFighters'
Weitere Untersuchung von Deskriptoren und die Metaklassenprogrammierung bietet fortgeschrittenere Techniken zur Manipulation von Objektmethoden.
Das obige ist der detaillierte Inhalt vonWie füge ich Instanzmethoden in Python hinzu und greife darauf zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!