да
Важно, чтобы getitem работал с последовательными целочисленными индексами, начиная с нуля. Это не всегда так.
К примеру я могу сделать LinkedList с перегрузкой гетитем который будет выдавать следющую ноду
Нету в питоне перегрузки
А что есть?
Это ж нелогично. Для связного списка итератор с некстом элементарнее реализуеется, а getitem - как?
типо в цикле крутишь узлы пока не совпадет с индексом гетитем
Можно, но нафига?
Для меня на этом этапе изучения - странное заявление - что объекты имеющие только гетитем тоже итерабле - проверить пока не в состоянии, не дорос.
гетитем для связного списка можно делать циклом или рекурсией на каждое обращение 8)
Сейчас это +- бесполезно, примеров практического использования практически нету
А что там проверять? Класс с одним гетитемом, внутрь что-нибудь - и итерируйся.
Почему бесполезно?
Ты часто пишешь итерейблы на гетайтеме?
вопрос не о том что часто пишешь или не пишешь а понять как все это работает и почему чтобы иметь понимание
и правда работает (интересно можно ли не обходить каждый раз наверно это решается только yield то есть стандартным iter) class Node: def __init__(self, val, next=None): self.val = val self.next = next class Linked: def __init__(self): self.root = Node(0) self.len = 1 cur = self.root for i in range(11): next = Node(i) self.len += 1 cur.next = next cur = next def __getitem__(self, key): if key >= self.len: raise StopIteration cur = self.root for _ in range(key): cur = cur.next return cur l = Linked() for n in l: print(n.val)
Зато уже лаконично объяснил
В том и дело, что linked list - ужасный вариант, где такое можно было бы применить.
Обсуждают сегодня