Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中维护对象之间的关系_Python_Oop - Fatal编程技术网

在Python中维护对象之间的关系

在Python中维护对象之间的关系,python,oop,Python,Oop,考虑以下假设的人员管理系统。假设每个人对象属于多个组对象,每个组包含多个人对象。我们可以通过向每个人和每个组对象添加列表来表示它,但在创建、删除或修改对象时,我们必须保持同步。在这种情况下,On-change回调不会很好地工作,因为它们可能导致无限循环 现在假设每个组都有一个名称和描述。名称存储在一个dict中,这样我们就可以找到哪个组使用哪个名称,并且对描述进行索引,以便我们可以搜索它。每当组发生更改时,这些都需要更新 该应用程序有一个GUI,可以显示人员和组。每当对象的属性发生更改时,GUI

考虑以下假设的人员管理系统。假设每个
对象属于多个
对象,每个
包含多个
对象。我们可以通过向每个
和每个
对象添加
列表
来表示它,但在创建、删除或修改对象时,我们必须保持同步。在这种情况下,On-change回调不会很好地工作,因为它们可能导致无限循环

现在假设每个
组都有一个名称和描述。名称存储在一个
dict
中,这样我们就可以找到哪个组使用哪个名称,并且对描述进行索引,以便我们可以搜索它。每当组发生更改时,这些都需要更新

该应用程序有一个GUI,可以显示
人员
。每当对象的属性发生更改时,GUI都需要更新


假设我们必须处理大量这样的效应。跟踪这一点相当令人困惑。我可以想象这些使用属性、自定义集合甚至元类。是否有任何设计模式/框架可用于处理此类系统?

大多数ORM都会处理此问题。只需使用内存中的SQLite表,就可以让它完成繁重的工作。

这相当棘手。是的,个人和组数据可以映射到关系数据库中的表,但是自动更新视图更具挑战性

幸运的是,Qt(因此也是PyQT)有一个MVC框架,可以自动处理您想要的大部分内容。数据存储组件可以使用数据库表来存储个人和组数据。您还可以在同一基础数据模型上创建多个视图,并将其配置为在基础数据更改时自动更新。这使用了一个称为Signals的Qt特性,视图订阅模型的信号以获得更改通知

这本书有与本书非常相似的例子,见第14章和第15章。也可能有其他GUI框架提供类似的MVC功能,当底层数据发生变化时,视图会自动得到通知