我想在python中定义一个Integer类,其中一个Integer(称为y)可以与另一个Integer(称为x)相关,并在此Integer x更改时自动更新。更具体地说,我希望有以下行为
>>> x = Integer(7)
>>> y = x + 2
>>> print y
9
>>> x.set(9)
>>> print y
11
>>> z = x + y
>>> y.set(10)
>>> print z
19
我意识到人们可以同情地做到这一点,但我有兴趣自己实现这一点。如果有人能够以最简单的方式指出如何解决这个问题,我将不胜感激?谢谢。
答案 0 :(得分:2)
我之前没有使用过Sympy,但这是我的尝试:
class Integer(object):
def __init__(self, value_or_callback):
if isinstance(value_or_callback, int):
self._value_callback = lambda: value_or_callback
else:
self._value_callback = value_or_callback
@property
def value(self):
return self._value_callback()
def set(self, new_value):
self._value_callback = lambda: new_value
def __add__(self, other):
if isinstance(other, int):
return Integer(lambda: self.value + other)
elif isinstance(other, Integer):
return Integer(lambda: self.value + other.value)
else:
raise TypeError(other)
def __radd__(self, other):
return self.__add__(other)
def __repr__(self):
return str(self.value)
if __name__ == '__main__':
x = Integer(7)
y = x + 2
print(y)
x.set(9)
print(y)
z = x + y
y.set(10)
print(z)
<强>输出强>
9
11
19