Поведение оператора in в коллекциях
Для понимания мотивации опишу контекст. Я реализую класс неориентированного графа, который выглядит упрощенно так
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_, но может быть знатоки пайтона знают другие варианты?
Источник: Stack Overflow на русском