Кодирование группы взаимосвязанных объектов, которые обновляются при добавлении или удалении объекта в группе - PullRequest
0 голосов
/ 17 июня 2020

Итак, у меня есть группа из N человек, каждый из которых имеет свой уникальный идентификатор. Каждый человек имеет рандомизированное мнение о каждом уже существующем человеке в диапазоне от 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.

1 Ответ

0 голосов
/ 17 июня 2020

Здесь для справки, это не работает для большего количества групп людей, только для одной группы людей. Если вам нужно больше групп, вы должны указать ключ группы для каждого человека. Если вы хотите удалить человека, сначала следует 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)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...