首页 > 解决方案 > 编码一组相互关联的对象,这些对象在组中添加或删除对象时更新

问题描述

所以我有一组 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的初学者。

标签: 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)]

推荐阅读