当原始变量更新时,如何设置依赖于另一个变量的变量进行更新?

时间:2019-06-01 00:50:25

标签: python variables

在python中,让我们运行以下代码行:

x = 0
y = x
x += 1
print(y)
print(x)

尽管我们在行2中设置了x=y,但输出的第一行与第二行明显不同。

但是,有没有办法像x一样更新y

2 个答案:

答案 0 :(得分:1)

我正在使用observer design pattern

#!/usr/bin/env python
# -*-coding: utf-8 -*-


class X:
    def __init__(self, subject):
        self.subject = subject
        self.subject.register(self)
        self.update()

    def update(self):
        self.data = self.subject.data


class Y:
    def __init__(self, data=10):
        self.data = data
        self._observers = list()

    def set(self, value):
        self.data = value
        self.notify()

    def register(self, observer):
        self._observers.append(observer)

    def notify(self):
        for ob in self._observers:
            ob.update()


y = Y(1)
x = X(y)
assert x.data == 1 and y.data == 1

y.set(20)
assert x.data == 20 and y.data == 20

y.set(-1)
assert x.data == -1 and y.data == -1

答案 1 :(得分:1)

要扩展@juanpa的评论,如果将值包装在列表中,则会出现此现象:

x = [0]
y = x
x[0] += 1
print(y[0])
print(x[0])