Heim > Backend-Entwicklung > Python-Tutorial > Wie kann ich spezielle Methoden auf einer Python-Instanz überschreiben?

Wie kann ich spezielle Methoden auf einer Python-Instanz überschreiben?

Linda Hamilton
Freigeben: 2024-12-04 05:12:10
Original
656 Leute haben es durchsucht

How Can I Override Special Methods on a Python Instance?

Eine spezielle Methode auf einer Instanz überschreiben

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)
Nach dem Login kopieren

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)
Nach dem Login kopieren

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)
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage