Heim > Backend-Entwicklung > Python-Tutorial > Können Sie die speziellen Methoden von Python direkt auf Instanzen überschreiben?

Können Sie die speziellen Methoden von Python direkt auf Instanzen überschreiben?

Susan Sarandon
Freigeben: 2024-11-30 04:04:10
Original
178 Leute haben es durchsucht

Can You Override Python's Special Methods Directly on Instances?

Spezielle Methoden für Instanzobjekte überschreiben

In Python werden spezielle Methoden mit Namen, die von doppelten Unterstrichen umgeben sind, normalerweise nicht für Instanzen, sondern für Instanzen aufgerufen ihre Klassen. Dies ist ein Implementierungsdetail von CPython, dem Standardinterpreter. Folglich ist es nicht möglich, __repr__() direkt auf einer Instanz zu überschreiben und zu erwarten, dass die benutzerdefinierte Implementierung verwendet wird.

Betrachten Sie beispielsweise den folgenden Code:

class A(object):
    pass

def __repr__(self):
    return "A"

from types import MethodType
a = A()
print(a)   # Output: <__main__.A object at 0x0101C5D0>
print(repr(a))  # Output: '<__main__.A object at 0x0101C5D0>'
Nach dem Login kopieren

Wie wir können Sehen Sie, repr(a) liefert nicht das erwartete Ergebnis von „A.“

Um diese Einschränkung zu umgehen, muss man eine neue Methode definieren, die die ursprüngliche Implementierung aufruft, as folgt:

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() ersetzen:

setattr(a, "_repr", MethodType(my_repr, a, a.__class__))
Nach dem Login kopieren

wobei my_repr die gewünschte benutzerdefinierte Implementierung ist.

Das obige ist der detaillierte Inhalt vonKönnen Sie die speziellen Methoden von Python direkt auf 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