根据类属性更改依赖对象

时间:2018-01-21 15:50:41

标签: python python-3.x class

例如,如果我有两个类:

class A:
  def __init__(self):
     self.a = 1;

  def update(self, val):
     self.a = val;
class B:
  def __init__(self, default = A()):
     self.b = default.a;

使用它们: object_a = A(); object_b = B(object_a);

然后,我想使用object_a.a更新object_a.update(update_val)属性,同时在所有其他相关对象上同时同时更新(object_b.b也将更新为update_val)。

如何在Python中执行此操作,是否有内置的'方式是什么?

我已经考虑过一些手动解决方案,例如:

class A:
  def __init__(self):
     self.a = 1;
     self.dependent = None; 

  def update(self, val):
     self.a = val;
     if self.dependent != None:
        self.dependent.b = self.a;

class B:
  def __init__(self, default = A()):
     default.dependent = self;
     self.b = default.a;

1 个答案:

答案 0 :(得分:1)

实现所要求的一种方法是使用可变对象(例如列表)来存储属性的数据。由于对象将引用列表,因此更改列表的值将共享给两个对象。

以下是使用列表存储基础值的版本,但维护属性行为.a.b

class A:
    def __init__(self):
        self._a = [1]

    def update(self, val):
        self._a[0] = val

    @property
    def a(self):
        return self._a[0]

class B:
    def __init__(self, default):
        self._b = default._a

    @property
    def b(self):
        return self._b[0]

a = A()
b = B(a)
a.update(4)

b.b
# returns:
4