Проверка вхождения в коллекцию в ООП в Python
Оператор in для объекта вызывает
метод __contains__. Метод получает
искомое значение и возвращает True
или False.
Давайте добавим __contains__ к классу
с числами:
class Numbers:
def __init__(self):
self.__data = [1, 2, 3]
def __contains__(self, num):
return num in self.__data
Создадим объект и проверим вхождение:
nums = Numbers()
print(2 in nums) # выведет True
print(5 in nums) # выведет False
Для отрицания используют not in:
print(5 not in nums) # выведет True
Сделаем проверку для коллекции сотрудников по имени:
class Employee:
def __init__(self, name):
self.name = name
class Workers:
def __init__(self):
self.__data = [
Employee('john'),
Employee('smit'),
]
def __contains__(self, name):
for worker in self.__data:
if worker.name == name:
return True
return False
Проверим, есть ли сотрудник с заданным именем:
workers = Workers()
print('john' in workers) # выведет True
print('eric' in workers) # выведет False
Добавьте __contains__ в класс
Numbers.
Сделайте __contains__ в классе
Workers. Поиск идет по имени
сотрудника.
Проверьте через in, есть ли
в коллекции сотрудник с именем
smit.