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