Spezielle Methoden für eine Instanz überschreiben: Eine Untersuchung
Stellen Sie sich eine Situation vor, in der Sie eine Instanz einer Klasse haben und diese ändern möchten spezielle Methoden wie __repr__(). Beim Versuch, diese Methoden zu überschreiben, kann es zu unerwartetem Verhalten kommen.
Um dies zu veranschaulichen, betrachten Sie den folgenden Code:
class A(object): pass def __repr__(self): return "A" from types import MethodType a = A()
Wenn Sie repr(a) aufrufen, erwarten Sie, dass Sie „A , vorausgesetzt, dass repr überschrieben wurde. Das Ergebnis ist jedoch nicht wie erwartet.
Diese Diskrepanz ist auf Pythons Ansatz zum Aufrufen spezieller Methoden zurückzuführen. Normalerweise führt Python spezielle Methoden nur für die Klasse selbst aus, nicht für ihre Instanzen. Folglich ist das Überschreiben von repr direkt auf einer Instanz wirkungslos.
Um diese Einschränkung zu überwinden, ziehen Sie den folgenden Ansatz in Betracht:
class A(object): def __repr__(self): return self._repr() def _repr(self): return object.__repr__(self)
In diesem geänderten Code repr auf einer Instanz kann durch Ersetzen von _repr() überschrieben werden.
Im Gegensatz zu diesem Verhalten Der folgende Codeausschnitt veranschaulicht den Unterschied zwischen dem Überschreiben spezieller Methoden und regulärer Methoden:
class A(object): def foo(self): return "foo" def bar(self): return "bar" a = A() setattr(a, "foo", MethodType(bar, a, a.__class__))
In diesem Fall wurde die spezielle Methode foo erfolgreich auf der Instanz überschrieben. Es ist jedoch wichtig zu beachten, dass diese Fähigkeit nur bei regulären Methoden verfügbar ist.
Das obige ist der detaillierte Inhalt vonWarum kann ich spezielle Methoden nicht direkt auf Python-Instanzen überschreiben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!