python - 编码一组相互关联的对象,这些对象在组中添加或删除对象时更新
问题描述
所以我有一组 N 人,每个人都有自己唯一的 id。每个人对每个已经存在的人都有一个从 0 到 100 的随机意见。添加一个新人后,我希望所有现有的人都获得这个新人的随机意见。删除现有人员后,我希望所有剩余人员删除他们对已删除人员的意见。
这是我到目前为止所拥有的:
import random
persons = {}
class Person():
def __init__(self, idn):
self.idn = idn
self.opinions = {}
for i in persons:
self.opinions[i] = random.randrange(100)
persons[idn] = self
for i in persons:
persons[i].update()
def update(self):
pass
for i in range(20):
person_i = Person(i)
现在很明显,这里的问题是只有最后创建的对象具有所有其他人的意见。我正在修补创建 Person.update() 函数,但我不知道如何继续。
我在想,也许已经在某个地方创建了一个框架来处理这种情况?(我最终希望建立更复杂的相互关系)。这个想法是让一个对象与其组中的每个其他对象保持关系,反之亦然。
任何帮助表示赞赏,尤其是学习资源。我是python的初学者。
解决方案
在这里供您参考,它不适用于更多人组,仅适用于一个人组。如果您需要更多组,则必须为每个人指定组键。如果要删除人员,应先使用 person.delete() 。
import random
class Person():
table = {}
def __init__(self):
self.key = self.get_key()
self.opinions = {}
for key in Person.table:
self.opinions[key] = random.randrange(100)
for person in Person.table.values():
person.opinions[self.key] = random.randrange(100)
Person.table[self.key] = self
def get_key(self):
i = 0
while i in Person.table:
i += 1
return i
def delete(self):
del Person.table[self.key]
for person in Person.table.values():
del person.opinions[self.key]
del self
persons = [Person() for i in range(20)]
推荐阅读
- asp.net-core - 在 .Net Core 3 中配置 webpack 开发服务器
- javascript - 为什么 Javascript/Angular 不让这个函数在它继续执行之前完成?
- c - 如何用文件中的数据填充结构?
- html - 标题卡在导航栏中。我需要在哪里放置 clearfix?
- spring - Keycloak 在 Docker 容器上的 Spring 中返回 500 / NPE URI
- asp.net-core - 如何在 ASP.NET Core Identity 中结合外部登录和双重身份验证?
- javascript - 如何使用javascript在文本区域中触发输入事件
- tensorflow - 将除自定义 Keras 层中的最大值之外的所有内容清零
- css - 如何在 css 中定义换行符,这也会影响标签跨度
- html - 如何使用带有溢出的弹性增长:滚动;物品?