Есть ли способ заставить операторы множеств работать с множествами, в которых хранятся объекты? - PullRequest
0 голосов
/ 27 апреля 2019

Я пытаюсь найти способ сравнения объектов в наборах, чтобы оператор & правильно работал с ними.

Я пытался найти исходники для функции Set intersect(), но безнадежно. Я пытался перегрузить оператор equals, но когда я добавил функцию __eq__() в определение класса, объекты Person стали недоступными.

class Person:
    def __init__(self, dictionary):
        self.dictionary = dictionary

def foo1():
    first_set.add(Person({"age" : 20}))

def foo2():
    second_set.add(Person({"age" : 20}))

first_set = set()
second_set = set()

foo1()
foo2()

print(first_set)
print(second_set)
print(first_set & second_set)  # I'd like to get non-empty intersection here

Я думал, что это может работать как-то с перегрузкой __eq__(), но это невозможно.

1 Ответ

0 голосов
/ 27 апреля 2019

Чтобы ваша коллекция классов была безопасной, вам необходимо переопределить __eq__ и __hash__ - см. https://hynek.me/articles/hashes-and-equality/ и Рекомендуемый способ реализации __eq__ и __hash __ .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...