Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗pyOpClInr 98 of 174 menu
◀ ▶

Введение в объект как коллекцию в Python

Список в Python уже ведет себя как коллекция: у него есть длина, доступ по индексу, перебор в цикле. Свой класс можно научить тому же, если данные хранить внутри объекта, а снаружи перехватывать обращения специальными методами.

Пусть класс хранит числа в приватном списке __data. Снаружи мы хотим узнавать, сколько элементов лежит в объекте, через функцию len. Для этого в классе объявляют метод __len__.

Метод __len__ не вызывают вручную с точкой: его вызывает Python, когда вы пишете len от объекта. Внутри метода обычно возвращают длину внутреннего списка.

Давайте сделаем такой класс:

class Numbers: def __init__(self): self.__data = [1, 2, 3] def __len__(self): return len(self.__data)

Создадим объект и узнаем его длину:

nums = Numbers() print(len(nums)) # выведет 3

Тот же прием работает для списка объектов. Пусть класс хранит сотрудников:

class Employee: def __init__(self, name): self.name = name class Workers: def __init__(self): self.__data = [ Employee('john'), Employee('smit'), ] def __len__(self): return len(self.__data)

Проверим длину коллекции сотрудников:

workers = Workers() print(len(workers)) # выведет 2

Метод __len__ - первый шаг к объекту- коллекции. Еще есть __getitem__, __setitem__, __delitem__, __iter__ и __contains__. Они позволяют работать с объектом почти как со списком.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить