1
resposta

Fugindo da Complexidade

Na aula foi apresentado um erro que ocorre pela impossibilidade do "For" iterar um objeto que não é iterável. Antes de herdarmos argumentos da "List" não é possível usar o nosso objeto da "classe Playlist" dentro do "For", depois de herdado torna-se possível e tudo bem. Eu entendi que uma classe filha obviamente herda as características da classe mãe e por "List" ser iterável o objeto da "Classe Playlist" se torna também, mas dentro da "classe Playlist" já existia uma lista que era o seu segundo atributo (ou terceiro se contar o "self"), enquanto que o primeiro é o "Nome" do objeto playlist. Eu queria saber se o objeto, antes de herdar "List" não é iterável por causa da existência desse "nome" ou se é porquê o objeto não é iterável desde o começo por natureza. Eu não entendi o que torna esse objeto não iterável no começo antes de herdar e também eu não entendi como ele se tornou iterável depois de apenas herdar "List", sendo que dentro do seus atributos/argumentos ainda existem "nome" que não é uma lista. Por que dentro do "For" desconsiderou o "nome" da Classe Playlist?

1 resposta

Olá Aaron!

Exemplo 01 - Sem herdar de list Insira aqui a descrição dessa imagem para ajudar na acessibilidade

  • Neste exemplo o objeto playlist não é iterável, por que um objeto não é iterável.
  • Para conseguir fazer o for dentro desse objeto, tivemos que acessar o seu atributo programas, que é iterável (do tipo list), assim conseguimos fazer a exibição dos programas.
  • Para saber o tamanho da playlist, seria preciso utilizar o método tamanho que criamos na nossa classe Playlist (esqueci do colocar no exemplo da foto).

Exemplo - Herdando de list Insira aqui a descrição dessa imagem para ajudar na acessibilidade

  • Neste exemplo o objeto Playlist se tornou iterável, pois herdou o comportamento de list.
  • Não foi necessário acessar nenhum atributo para fazer o for no objeto.
  • Não foi preciso fazer um método tamanho, para exibir o tamanho da playlist.

OBS - A grande desvantagem é que ao herdamos o comportamento de list, herdamos uma série de comportamentos que não serão úteis para nosso código. Se estiver usando o PyCharm e clicar em 'list' onde declaramos a classe Playlist, você será levado ao arquivo 'builtins.py', lá conseguimos perceber os métodos que foram herdados e que não vamos utilizar. Também da pra ver o funcionamento do _init_ do list e entender por que o objeto Playlist se torna iterável.