Je ne pouvais pas voir une réponse pertinente ici que je pouvais comprendre. J'ai un certain code qui génère ce que je pensais être une liste que je pouvais itérayer mais ne peut pas.
code: EM> P> class freqList():
def __init__(self, startFreq, stopFreq, skip):
self.startFreq = startFreq
self.stopFreq = stopFreq
self.skip = skip
def __iter__(self):
pass
def listFreqs(self):
return list(range(self.startFreq, self.stopFreq, self.skip))
def __repr__(self):
return '{}, {}, {}'.format(
self.startFreq,
self.stopFreq,
self.skip)
def __str__(self):
return 'instance object of frequency list, startFreq:{},stopFreq: {},skip: {}'.format(
self.startFreq,
self.stopFreq,
self.skip)
print('\n'*4)
listy = freqList( 1000, 5000, 1000)#range cannot use floats, only ints
print(listy.listFreqs())
print('listy type:', type(listy),'\n')
listy_iter = iter(listy)
print('listy_iter type:', type(listy_iter),'\n')
4 Réponses :
en Python une fois que vous instaniez une classe ce que vous obtenez est un objet. Ainsi, essayez plutôt ce Ceci renvoie la liste qui est le type de retour de la fonction maintenant listfreqs code> de classe
freqlist () code> p>
listy_iter code> aura une liste p> p>
J'ai fait un petit ajustement dans votre classe si vous regardez, j'ai changé la liste à créer dans Si vous avez défini votre liste dans le < Code> LISTFREQS CODE>, il va recompaliser chaque fois que vous appelez cette méthode. De plus, la classe ne saura pas ce que c'est jusqu'à ce que la méthode soit appelée, il ne peut donc pas créer un itérateur dessus. P> P> __ init __ code> et stocké dans un attribut. Ensuite, les listfreqs appelleront cet attribut pour afficher la liste complète.
La création d'itérator se produit sur
__ iter __ code>, où self._freqs est enveloppé avec le magique
iter () code>. P>
Votre __ iTer __ () code> La méthode doit réellement renvoyer un itérateur. Comme ceci:
Essayez d'élaborer votre problème.
De ma compréhension ci-dessous, c'est ce que vous êtes à la recherche de
Eh bien, votre
__ iTER __ code> La méthode ne renvoie rien. Si vous le faites faire quelque chose comme
pour x dans self.listfreqs (): rendement x code>, alors vous pouvez faire
pour l'élément dans listy: .... code> dans votre code principal .