Heim > Backend-Entwicklung > Python-Tutorial > Warum kann ich spezielle Methoden nicht direkt auf Python-Instanzen überschreiben?

Warum kann ich spezielle Methoden nicht direkt auf Python-Instanzen überschreiben?

Patricia Arquette
Freigeben: 2024-11-28 22:14:11
Original
805 Leute haben es durchsucht

Why Can't I Override Special Methods Directly on Python Instances?

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

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

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

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!

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