Python中的从属变量

时间:2017-01-15 13:32:04

标签: python

我想在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

我意识到人们可以同情地做到这一点,但我有兴趣自己实现这一点。如果有人能够以最简单的方式指出如何解决这个问题,我将不胜感激?谢谢。

1 个答案:

答案 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