Python中的对象变量依赖关系

2024-10-03 23:18:29 发布

您现在位置:Python中文网/ 问答频道 /正文

在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和{}之间的关系。但是,这只解释一次。在这两个变量之间建立永久关系的最佳方法是什么,以确保house1.house_sizeroom1.room_size随后发生变化时自动更新?在

编辑: 为了澄清这一点,我正在寻找一种通用的解决方案,在读取对象变量的值时,对象验证其所有依赖项是否仍然“有效”。在上面的例子中,对象变量house1.house_size依赖于room1.room_size

您可以将这些依赖关系与电子表格应用程序相类似:例如,单元格A1可能被定义为=B1+B2+B3,而{}又可能被定义为=C1*2。每当读取单元格A1的值时,它将检查B1B2或{}中的任何一个发生了变化。如果是这样,则在返回A1之前,将重新计算A1的值。因此,在Python中,我在寻找一个事件处理程序,当house1.house_size的值被读取时,它就会被触发,这样它的值在返回之前可以被重新计算。在

答案应该足够通用,这样就可以处理对象的整个依赖树,树中的每个节点都会自己检查它所依赖的所有对象变量的所有值是否仍然有效,否则将重新计算。在


Tags: 对象方法size定义关系a1class例子
1条回答
网友
1楼 · 发布于 2024-10-03 23:18:29

必须在房间和房屋模型之间建立关系。在这个答案中,我使room对象接受house对象作为参数之一,并且每当设置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

相关问题 更多 >