Запись элемента коллекции в ООП в Python
Запись в элемент по индексу перехватывает
метод __setitem__. Python передает
индекс и новое значение, а метод
кладет его во внутренний список.
Давайте добавим __setitem__ к классу
с числами:
class Numbers:
def __init__(self):
self.__data = [1, 2, 3]
def __getitem__(self, index):
return self.__data[index]
def __setitem__(self, index, value):
self.__data[index] = value
Создадим объект, изменим элемент и проверим результат:
nums = Numbers()
nums[0] = 10
print(nums[0]) # выведет 10
Перед записью можно выполнять проверки. К примеру, разрешим только положительные числа:
class Numbers:
def __init__(self):
self.__data = [1, 2, 3]
def __setitem__(self, index, value):
if value > 0:
self.__data[index] = value
else:
print('value is incorrect')
Проверим корректную и некорректную запись:
nums = Numbers()
nums[1] = 5
nums[1] = -1 # ошибка
Сделаем запись по индексу для списка сотрудников:
class Employee:
def __init__(self, name):
self.name = name
class Workers:
def __init__(self):
self.__data = [
Employee('john'),
Employee('smit'),
]
def __setitem__(self, index, employee):
self.__data[index] = employee
Заменим первого сотрудника и выведем имя:
workers = Workers()
workers[0] = Employee('eric')
print(workers[0].name) # выведет 'eric'
Добавьте __setitem__ в класс
Numbers.
В __setitem__ класса Numbers
сделайте проверку: число должно быть
больше 0.
Сделайте __setitem__ в классе
Workers для замены сотрудника
по индексу.