Метод __contains__ — это специальный (dunder) метод, который включает оператор принадлежности in для пользовательских объектов. Без него Python переходит к итерации по объекту, что менее эффективно.
Реализуя __contains__, ты даёшь своему классу явный контроль над тем, как выполняются проверки принадлежности. Это особенно полезно, когда ты хочешь определить собственную логику поиска или оптимизировать производительность.
class MyCollection:
def __init__(self, items):
self.items = items
def __contains__(self, item):
return item in self.items
Использование:
collection = MyCollection([1, 2, 3])
print(2 in collection) # True
print(5 in collection) # False
__contains__ автоматически, когда используется оператор inTrue или False)__contains__ Python переходит к __iter__ или __getitem__ для проверок принадлежности, что требует итерации по всей коллекцииclass FastCollection:
def __init__(self, items):
self._items = set(items) # O(1) lookup
def __contains__(self, item):
return item in self._items
Это гарантирует, что проверки принадлежности выполняются за O(1) вместо O(n), что критично для больших наборов данных.
Метод __contains__ должен возвращать булево значение, и Python автоматически вызовет этот метод, когда оператор in используется на экземпляре твоего класса.
Новый — ещё не проверен сообществом
Вы