Python: Criando uma classe iterável

5 de abril de 2011 william Python

Depois de um tempinho sem postar nada aqui no blog, queria compartilhar o que estudado a respeito da linguagem Python. Por mais que minha caminha ainda esteja nos primeiros passos, a cada dia fico mais envolvido com o pode dessa linguagem.

Essa semana queria fazer uma classe “iteravel”, ou seja eu queria favor com que o comando “for” passasse por ela me retornado o nome do membros (métodos e variáveis), assim com se faz com “xrange()”.

Tamanha for a minha surpresa quando depois analisar opções malucas encontrei a solução:


class ClasseTeste(object):
    valor1 = 1
    valor2 = 2

    def ola(self):
        print "Ola"

    def __iter__(self):
        for attr in dir(self):
            if not attr.startswith('__'):
                yield attr


if __name__ == '__main__':
    c = ClasseTeste();
    for i in c:
        print i

e nesse caso obtive a sequinte saída:

ola
valor1
valor2

Esse resultado só foi possível graças a duas coisas: O método “__iter__” que é chamado sempre que acontece uma iteração com o objeto daquela classe.

E por fim temos o comando “yield” que é utilizado justamente para criação de generators ou seja, quando alcançado ele retorna o valor da variável “attr” para quem o chamou e armazena esse valor para que próxima chamada o valor permaneça como estava anteriormente, sendo possível assim que o “for” continue de onde parou.

Por hora é só mais pretendo continuar postado os resultado dos meus estudo sobre esta linguagem. Até a próxima.

generator, iteração, python, yield,


Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

*

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Powered by WordPress. Designed by elogi.