Python циклические ссылки на объекты (через атрибуты) и проверка на равенство - PullRequest
0 голосов
/ 20 марта 2020

Я уже некоторое время пытаюсь найти ответ на этот вопрос, и, хотя я нахожу много информации о циклических ссылках и проверке объектов на равенство, я не могу найти точный ответ, который ищу.

Для ясности я работаю в Python 3.6.8.

Теперь у меня есть различные объекты, между которыми я хотел бы создать связи. Они не являются родителями или детьми друг друга, поэтому я не хочу использовать наследование, но я бы хотел связать эти объекты с помощью атрибутов. Я хотел бы иметь возможность иметь эту ссылку в обоих направлениях, чтобы я мог добраться до другого объекта из любого из объектов. В результате получается что-то вроде этого:

class A():
    def __init__(self, b):
        self.b = b

class B():
    def __init__(self, a):
        self.a = a

Таким образом, из экземпляра класса AI можно указать, к какому экземпляру класса B он относится, и наоборот.

Однако, Я считаю, что это создает некую циркулярную ссылку.

Кроме того, я могу столкнуться с некоторыми проблемами при тестировании этих классов (unittest, pytest, et c.). В моем тесте у меня был бы объект класса B, который я хотел бы сравнить с объектом класса B, который возвращает мой код. Тем не менее, я сталкиваюсь с ошибками рекурсии при попытке сравнить эти объекты.

Итак, у меня есть следующие вопросы:

  • Является ли этот тип "циклической ссылки" проблемой? Это то, что я должен избегать? Если да, то какие "лучшие" (больше pythoni c) способы могли бы быть, чтобы гарантировать, что я все еще могу связать эти объекты ?? быть лучшим способом, которым я могу проверить, равны ли разные объекты? Заметьте, я не хочу видеть, равны ли идентификаторы объектов, просто если содержимое объектов равно.

Заранее спасибо за все время.

...