Поведение оператора in в коллекциях

Рейтинг: 0Ответов: 0Опубликовано: 10.04.2023

Для понимания мотивации опишу контекст. Я реализую класс неориентированного графа, который выглядит упрощенно так

class Edge(NamedTuple):
    s: str
    d: str

class Network:
    verts: set[str]
    edges: set[Edge]

Предполагается проводить над этим графом различные операции, которые включают в себя проверку вхождение некоторого ребра в множество ребер. Задача вполне тривиальная, но когда пишешь на пайтоне хочется лаконичности. Поэтому у меня встал следующий вопрос. Как можно добиться следующего результата:

class Edge(NamedTuple):
    s: str
    d: str

e = Edge('A', 'B')
edges = {e,}
e2 = Edge('B', 'A')
assert e2 in edges # True

Вполне ясно, что можно наследовать класс множества и перегрузить метод _contains_, но может быть знатоки пайтона знают другие варианты?

Ответы

Ответов пока нет.