TGViewer
Библиотека питониста | Python, Django, Flask Библиотека питониста | Python, Django, Flask @pyproglib · 37.3K subscribers
Post #7593 3.37K
🐍 Как сделать свой объект итерируемым в Python через `__getitem__`

В Python итерируемый объект — это любой объект, по которому можно пройтись в цикле for. Обычно это списки, строки, словари… но вы можете создать свой собственный!

👇 Секрет — метод `__getitem__`

Если ваш класс поддерживает доступ по индексам (`obj[0]`, obj[1] и т.д.), Python автоматически сможет итерироваться по нему.

Пример: арифметическая последовательность

class ArithmeticSequence:
def __init__(self, start: int, step: int, total: int) -> None:
self.start = start
self.step = step
self.total = total

def __getitem__(self, index: int) -> int:
if not 0 <= index < self.total:
raise IndexError(f"Invalid index {index}.")
return self.start + index * self.step


Использование:

seq = ArithmeticSequence(5, 3, 6)

print(seq[3]) # 14

for value in seq:
print(value, end=", ")
# 5, 8, 11, 14, 17, 20,


💡 Почему это работает?
Python просто пытается вызывать __getitem__(0), __getitem__(1), `__getitem__(2)`…
И продолжает, пока не получит IndexError.

⚠️ Важно:
Если вы выбрасываете другую ошибку (например, `KeyError`), итерация сломается.

Пример неправильной реализации:

class DictWrapper:
def __init__(self, values):
self.values = values

def __getitem__(self, index):
return self.values[index]


Здесь Python не понимает, когда остановиться — и падает с ошибкой.

📍 Навигация: Вакансии • Задачи • Собесы

Библиотека питониста

#буст
  • ❤ 5
  • 👍 4
  • 🔥 4
More from @pyproglib
  1. Sep 25, 2026🔥 Курс «ИИ для разработчиков» уже стартовал И мы решили открыть первое занятие всем — мож…
  2. Sep 20, 2026👻 94% токенов уходят не на код Анализ запусков показал: основная часть токенов уходит на…
  3. Sep 19, 2026📚Напоминаем про наш полный курс «Самоучитель по Python для начинающих» Мы написали и собр…
  4. Sep 15, 2026😭 Как не потратить недельный лимит AI-кодинга за три дня? Разберём на вебинаре, как трати…
  5. Sep 15, 2026⏱️ Справочник по Big-O в Python Для тех, кто хочет писать не просто работающий, а эффектив…
  6. Sep 14, 2026🤪 Если бы можно было задать один вопрос про AI в разработке — что бы вы спросили? Как выб…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →