Вопрос на
Имитация указателей в Python
, спрашивающий, как имитировать указатели в Python, имел хорошее предложение в решениях, а именно:
class ref:
def __init__(self, obj): self.obj = obj
def get(self): return self.obj
def set(self, obj): self.obj = obj
, который затем можно использовать, например,
a = ref(1.22)
b = ref(a)
print a # prints 1.22
print b.get() # prints 1.22
Класс можно изменить, чтобы избежать использования get
для оператора печати, добавив
def __str__(self): return self.obj.__str__()
Тогда
print b # prints out 1.22
Теперь я хотел бы иметь возможность выполнять арифметику с b так же, как и с a, что, я думаю, было бы равносильно тому, чтобы сказать, что я хочу, чтобы a
и b
вели себяточно так же как obj
.Есть какой-либо способ сделать это?Я пытался добавить методы, такие как
def __getattribute__(self, attribute): return self.obj.__getattribute__(attribute)
def __call__(self): return self.obj.__call__()
Но независимо от этого, вывод
print a + b
всегда
Traceback (most recent call last):
File "test.py", line 13, in <module>
print a + b
TypeError: unsupported operand type(s) for +: 'instance' and 'instance'
У кого-нибудь есть какие-либо идеи о том, какизменить класс ref
, чтобы разрешить это?
Спасибо за любой совет!