Python: Criando uma classe iterável
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.