все Python 3ООПфункция
__contains__
магические методы
Метод оператора in: x in obj вызывает obj.__contains__(x). Без него in перебирает объект целиком.
Синтаксис
def __contains__(self, item) -> bool: ...
Если __contains__ нет, Python откатывается к итерации — через __iter__ или __getitem__ — и сравнивает элементы по очереди, то есть O(n). Свой __contains__ позволяет сделать проверку быстрой: множество и словарь отвечают за O(1). Оператор not in — тот же вызов с отрицанием.
Примеры
class Range:
def __init__(self, lo, hi):
self.lo, self.hi = lo, hi
def __contains__(self, x):
return self.lo <= x < self.hi
r = Range(0, 10**9)
print(5 in r) # → True — без перебора миллиарда чисел
print(-1 not in r) # → True
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности