Python Разработка | Web Backend, Парсинг & Telegram Bots. Пайтон программирование с нуля. Django, FastAPI и SQL. Уроки для начинающих и IT карьера. Coding.
Образование · 29 мая 2026 г.
В Python можно переопределить оператор квадратных скобок ([]), реализовав магический ме... — 29 мая 2026 г. в 06:22:21.227
В Python можно переопределить оператор квадратных скобок ([]), реализовав магический метод __getitem__. Вот так можно создать объект, который виртуально содержит бесконечное количество повторяющихся элементов: class Cycle: def __init__(self, lst): self._lst = lst def __getitem__(self, index): return self._lst[index % len(self._lst)] print(Cycle(['a', 'b', 'c'])[100]) # 'b' Необычность здесь в том, что оператор [] поддерживает особый синтаксис. Его можно использовать не только так — [2], но и так — [2:10], [2:10:2], [2::2] или даже [:]. Обычно это интерпретируется как [start:stop:step], но вы можете задать любую логику для своих объектов. Что же передаётся в параметр index метода __getitem__, если использовать такой синтаксис? Для этого в Python существуют объекты slice. class Inspector: def __getitem__(self, index): print(index) Inspector()[1] # 1 Inspector()[1:2] # slice(1, 2, None) Inspector()[1:2:3] # slice(1, 2, 3) Inspector()[:] # slice(None, None, None) Можно даже комбинировать кортежи и срезы: Inspector()[:, 0, :] # (slice(None, None, None), 0, slice(None, None, None)) Объект slice сам по себе ничего не делает — он просто хранит атрибуты start, stop и step: s = slice(1, 2, 3) s.start # 1 s.stop # 2 s.step # 3 👉 @BookPython

