Sto utilizzando il rendimento per restituire il valore successivo nella funzione successiva alla nella mia classe. Ma non restituisce il valore successivo, restituisce l'oggetto generatore. Sto cercando di capire meglio gli iteratori e cedere. Potrei farlo nel modo sbagliato. Per favore guarda.quando provo dall'interno __next__. perché restituisce l'oggetto generatore?
class MyString:
def __init__(self,s):
self.s=s
def __iter__(self):
return self
def __next__(self):
for i in range(len(self.s)):
yield(self.s[i])
r=MyString("abc")
i=iter(r)
print(next(i))
Ciò restituisce:
generatore oggetto __next__ a 0x032C05A0
['__next__' restituisce il prossimo elemento nell'iteratore] (https://docs.python.org/3/library/stdtypes.html#iterator.__next__) in modo da rendere' __next__' un generatore non ha senso, o bene significa che ogni valore del tuo iteratore 'MyString' è un generatore. –
MyString non dovrebbe definire '__next__'. '__next__' è per gli iteratori, non iterabili. Allo stesso modo, non dovrebbe 'return self' for' __iter__'. – user2357112