0
votes

objet de sortie python non démontable

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')


1 commentaires

Eh bien, votre __ iTER __ La méthode ne renvoie rien. Si vous le faites faire quelque chose comme pour x dans self.listfreqs (): rendement x , alors vous pouvez faire pour l'élément dans listy: .... dans votre code principal .


4 Réponses :


1
votes

en Python une fois que vous instaniez une classe ce que vous obtenez est un objet. Ainsi, essayez plutôt ce xxx

Ceci renvoie la liste qui est le type de retour de la fonction listfreqs de classe freqlist ()

maintenant listy_iter aura une liste


0 commentaires

1
votes

J'ai fait un petit ajustement dans votre classe xxx

si vous regardez, j'ai changé la liste à créer dans __ init __ 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 __ , où self._freqs est enveloppé avec le magique iter () .

Si vous avez défini votre liste dans le < Code> LISTFREQS , 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.


0 commentaires

1
votes

Votre __ iTer __ () La méthode doit réellement renvoyer un itérateur. Comme ceci: xxx


0 commentaires

1
votes

Essayez d'élaborer votre problème. De ma compréhension ci-dessous, c'est ce que vous êtes à la recherche de xxx


0 commentaires