例如,如果我有两个类:
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;
答案 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