У меня есть класс Count, который принимает 3 параметра, включая self, mystart и myend. Он должен рассчитывать от mystart до myend (также наоборот) с использованием магических методов __iter__
, __next__
и __reversed__
. Я реализовал все три магических метода. Но я все еще не уверен, что это правильный путь для реализации следующих и обратных методов. Возможно ли, что я могу вызывать встроенные функции дальше и наоборот в моих методах __next__
и __reversed__
или есть ли какой-нибудь пифонический путь?__reversed__ Волшебный метод
class Count:
def __init__(self,mystart,myend):
self.mystart=mystart
self.myend=myend
self.current=mystart
self.reverse=[]
def __iter__(self):
"Returns itself as an Iterator Object"
return self
def __next__(self):
if self.current > self.myend:
raise StopIteration
else:
self.current+=1
return self.current-1
def __reversed__(self):
for i in range(self.myend,self.mystart,-1):
self.reverse.append(i)
return self.reverse
obj1=Count(0,10)
print("FOR LOOP")
for i in obj1:
print (i,end=",")
print ("\nNEXT")
obj2=Count(1,4)
print(next(obj2))
print(next(obj2))
print ("Reversed")
print(reversed(obj1))
нам для того, чтобы знать, что «правильный» путь, каков желаемый результат. Ваш код не выглядит так плохо – wheaties
Но я создаю новый список в моем методе __reversed__, который не дает мне хорошего чувства. :) –
Не имеет смысла давать итератору метод '__reversed__'. Это для последовательностей и других многозадачных итераций с порядковым представлением. – user2357112