在Python中,创建对象A的对象变量的最佳方法是什么,它取决于对象B的变量,并在对象B的变量发生变化时自动更新?
简单示例:
class house:
house_size = 100
class room:
room_size = 30
house1 = house()
room1 = room()
house1.house_size = room1.room_size * 10
print house1.house_size #returns 300
room1.room_size = 50
print house1.house_size #still returns 300, but I would like it to return 500
在上面的示例中,定义了house1.house_size
和room1.room_size
之间的关系。但是,这仅解释一次。建立两个变量之间永久关系的最佳方法是什么,以确保house1.house_size
随后room1.room_size
发生变化时自动更新?{/ p>
修改
为了澄清,我正在寻找一个通用的解决方案,通过该解决方案,对象可以验证其所有依赖关系是否仍然是有效的"每当读取其对象变量的值时。在上面的示例中,对象变量house1.house_size
取决于room1.room_size
您可以将这些依赖关系视为与电子表格应用程序类似:例如,单元格A1
可能定义为=B1+B2+B3
,而B1
可能会定义为=C1*2
。每当正在读取单元格A1
的值时,它将检查B1
,B2
或B3
中是否有任何更改。如果是这样,那么在返回值之前将重新计算A1
的值。所以在Python中我正在寻找一个事件处理程序,只要读取house1.house_size
的值就会触发它,以便在返回之前重新计算它的值。
答案应该足够通用,以便可以处理对象的整个依赖树,从而树中的每个节点自行检查它所依赖的所有对象变量的所有值是否仍然有效,否则重新计算。
答案 0 :(得分:2)
您必须在房间和房屋模型之间建立关系。在这个答案中,我使房间对象接受房屋对象作为参数之一,每当设置room_size
参数时,它也会更新house_size
。
class house:
house_size = 100
class room:
def __init__(self, house_object):
self.house_object = house_object
self.room_size = self.house_object.house_size / 10
def __setattr__(self, key, value):
self.__dict__[key] = value
if key == "room_size":
self.house_object.house_size = self.room_size * 10
house1 = house()
room1 = room(house1)
room1.room_size = 50
print house1.house_size