__len__
, который возвращает число элементов в коллекции. Важно корректно учитывать логическую структуру коллекции при вычислении "длины". Например, для дерева это может быть число узлов, а для графа - число вершин или ребер. Метод должен возвращать целое число.
Для реализации функциональности вычисления длины объекта с использованием метода __len__
в нестандартных коллекциях, необходимо определить этот метод внутри вашего класса. Метод __len__
должен возвращать целое число, представляющее длину или "размер" вашей коллекции.
Вот пример реализации для нестандартной коллекции, скажем, для класса, представляющего набор уникальных элементов (чем-то похоже на `set`, но с кастомной логикой):
class CustomUniqueCollection:
def __init__(self, initial_data=None):
self._data = [] # Внутреннее представление коллекции
if initial_data:
for item in initial_data:
self.add(item)
def add(self, item):
if item not in self._data:
self._data.append(item)
def __len__(self):
"""Возвращает количество уникальных элементов в коллекции."""
return len(self._data)
def __contains__(self, item):
return item in self._data
# Пример использования:
my_collection = CustomUniqueCollection([1, 2, 2, 3, 4, 4, 5])
print(len(my_collection)) # Вывод: 5
print(3 in my_collection) # Вывод: True
print(6 in my_collection) # Вывод: False
Объяснение:
CustomUniqueCollection
хранит элементы в списке _data
.
add
добавляет элементы только если их еще нет в списке, обеспечивая уникальность.
__len__
возвращает длину списка _data
, что и представляет собой количество уникальных элементов.
__contains__
позволяет проверить, содержит ли коллекция определенный элемент.
Важные моменты:
__len__
должен возвращать неотрицательное целое число. В противном случае может быть вызвано исключение.
__len__
должен выполняться за константное время O(1). Если вычисление длины требует сложной операции (например, полного перебора элементов), это может повлиять на производительность.
__len__
должен отражать текущее состояние коллекции.
__len__
позволяет использовать встроенную функцию len()
для вашей коллекции.
В общем случае, определяя метод __len__
, убедитесь, что он соответствует интуитивному пониманию "длины" или "размера" вашей нестандартной коллекции.