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>'
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)
Jetzt können Sie __repr__() auf einer Instanz überschreiben, indem Sie _repr() ersetzen:
setattr(a, "_repr", MethodType(my_repr, a, a.__class__))
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!