Ich habe die folgende Klasse:Wie verwendet man __getattr__, um zu attributierende Methoden zu delegieren?
class MyInt:
def __init__(self, v):
if type(v) != int:
raise ValueError('value must be an int')
self.v = v
def __getattr__(self, attr):
return getattr(self.v, attr)
i = MyInt(0)
print(i + 1)
ich den Fehler: TypeError: unsupported operand type(s) for +: 'MyInt' and 'int'
Sollte i.__add__(1)
nicht genannt werden? Und sollte nicht __getattr__
aufgerufen werden, wenn keine solche Methode in der MyInt
Klasse gefunden wird?
[Zusätzlich zur Umgehung beliebiger Instanzattribute aus Gründen der Korrektheit umgeht die implizite spezielle Methodensuche in der Regel auch die Methode '__getattribute __()' selbst der Metaklasse des Objekts. (Https://docs.python.org/3/ reference/datamodel.html # special-method-lookup) –