Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Dúvida em relação ao iterável

class Playlist:
    def __init__(self, nome, programas):
        self.nome = nome
        self._programas = programas

    @property
    def listagem(self):
        return self._programas

    @property
    def tamanho(self):
        return len(self._programas)

No código acima, ao criar o property, a classe Playlist voltou a ser iterável?

2 respostas
solução!

Olá Janderson, tudo certo?

Na verdade, as properties tem relação com o conceito de encapsulamento. Sugiro você rever as aulas Encapsulamento e Usando Propriedades do curso Python3: Introdução a Orientação a Objetos.

Elas não fazem com que a classe Playlist seja iterável. Segundo a PEP 234, o que faz uma classe ser iterável é implementar um dos seguintes métodos:


- An object can be iterated over with for if it implements __iter__() or __getitem__().
- An object can function as an iterator if it implements next().

Portanto, precisa implementar __iter__() ou __getitem()__, além do método __next()__. Este é um assunto um pouco mais avançado mas eu indico a leitura da PEP 234 após você finalizar o curso.

No exemplo da aula, o que é iterável é o parâmetro programas da classe Playlist- na verdade, é esperado que se passe um objeto iterável no parâmetro programas. Veja que foi passado um objeto do tipo list no lugar deste parâmetro para a classe Playlist, e o objeto listdo python é iterável. Note também que você poderia passar um objeto do tipo inteiro no lugar do parâmetro progamas da classe Playlist e, neste caso, ele não seria iterável e geraria outros erros já que o método len() não aceita um objeto do tipo inteiro.

Não sei se ficou confuso. Caso a dúvida permaneça não deixe de perguntar.

Espero ter ajudado e bons estudos!

Não pelo contrário ficou claro, muito obrigado.