Получение элемента коллекции в ООП в Python
Доступ к элементу по индексу в квадратных
скобках перехватывает метод __getitem__.
Python передает в него индекс, а метод
должен вернуть элемент из внутреннего
списка.
Давайте добавим __getitem__ к классу
с числами:
class Numbers:
def __init__(self):
self.__data = [1, 2, 3]
def __len__(self):
return len(self.__data)
def __getitem__(self, index):
return self.__data[index]
Создадим объект и прочитаем элементы по индексам:
nums = Numbers()
print(nums[0]) # выведет 1
print(nums[1]) # выведет 2
print(nums[2]) # выведет 3
Можно обращаться с отрицательным индексом, как у обычного списка:
print(nums[-1]) # выведет 3
Сделаем коллекцию сотрудников с тем же методом:
class Employee:
def __init__(self, name):
self.name = name
class Workers:
def __init__(self):
self.__data = [
Employee('john'),
Employee('smit'),
]
def __getitem__(self, index):
return self.__data[index]
Получим первого сотрудника и выведем имя:
workers = Workers()
print(workers[0].name) # выведет 'john'
Добавьте __getitem__ в класс
Numbers.
Сделайте класс Workers с
__getitem__. По индексу должен
возвращаться объект Employee.
Выведите имя второго сотрудника
из объекта Workers через
доступ по индексу.