In Python besteht ein häufiges Ziel von Entwicklern darin, spezielle Methoden auf einer Instanz zu überschreiben. Dies ist jedoch normalerweise nicht möglich, da spezielle Methoden normalerweise nur für die Klasse selbst aufgerufen werden.
Problem:
Um dieses Konzept zu veranschaulichen, betrachten Sie den folgenden Codeausschnitt:
class A(object): pass def __repr__(self): return "A" from types import MethodType a = A() a repr(a) setattr(a, "__repr__", MethodType(__repr__, a, a.__class__)) a repr(a)
Wie oben zu sehen ist, führt das Überschreiben von __repr__ direkt auf der Instanz nicht zum erwarteten Ergebnis. repr(a) gibt die Standardklassendarstellung zurück, nicht den Rückgabewert der überschriebenen Methode.
Lösung:
Um das Überschreiben spezieller Methoden für eine Instanz zu erreichen, können Sie eine verwenden indirekter Ansatz. Definieren Sie die spezielle Methode als Wrapper, der eine interne, überschriebene Methode aufruft:
class A(object): def __repr__(self): return self._repr() def _repr(self): return object.__repr__(self)
Jetzt können Sie __repr__ auf einer Instanz überschreiben, indem Sie _repr() überschreiben. Zum Beispiel:
a = A() setattr(a, "_repr", lambda self: "Overridden") repr(a)
Dieser aktualisierte Code gibt die überschriebene Zeichenfolgendarstellung aus.
Das obige ist der detaillierte Inhalt vonWie kann ich spezielle Methoden auf einer Python-Instanz überschreiben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!