Python Glossary English

все 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Сообщить о неточности