У меня есть следующий класс:Как использовать __getattr__ для делегирования методов для атрибута?
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)
Я получаю ошибку: TypeError: unsupported operand type(s) for +: 'MyInt' and 'int'
не должны i.__add__(1)
называться? И не следует ли вызывать __getattr__
, если такой метод не найден в классе MyInt
?
[В дополнение к обходным атрибутам экземпляра в интересах корректности, неявный специальный поиск метода обычно также обходит метод '__getattribute __()' даже метакласса объекта] (https://docs.python.org/3/ reference/datamodel.html # special-method-lookup) –