1
resposta

Loop for com duas classes diferentes (não-herança) x Polimorfismo

Ola gente,

Começo me desculpando pela formulação 'nada Dev' da questão... :)

Então, pelo que entendi, Polimorfismo seria esse init da classe-mãe dentro do init da classe filha, que possibilita herdar os atributos da primeira.

class Programa:

  def __init__(self, nome, ano):
    self._nome = nome.title()
    self.ano = ano
    self._likes = 0

class Filmes (Programa):

  def __init__(self, nome, ano, duracao):
    super(Filmes, self).__init__(nome, ano)
    self.duracao = duracao

Em sequencia à essa explicação tinha o caso do loop for. Fiquei com dúvida sobre isso pois refiz o código sem que as classes fossem filhas de uma mesma classe mãe (mas sim classes criadas independentemente uma das outras) e o loop funcionou também.

class Filme:

  def __init__(self, nome, ano, duracao):
    self.nome = nome
    self.ano = ano
    self.duracao = duracao
    self.likes = 0

  def imprime(self):
    print(f'Nome: {self.nome} - Ano: {self.ano} - {self.duracao} min - Likes: {self.likes}')

class Serie:

  def __init__(self, nome, ano, temporada):
    self.nome = nome
    self.ano = ano
    self.temporada = temporada
    self.likes = 0

  def imprime(self):
    print(f'Nome: {self.nome} - Ano: {self.ano} - {self.temporada} Temporada - Likes: {self.likes}')

vingadores = Filme('vingadores', 2018, 160)
atlanta = Serie('atlanta', 2018, 2)

filmes_e_series = [vingadores, atlanta]

for p in filmes_e_series:
  p.imprime() 

Suponho eu que funcionou pelo fato das duas classes filhas terem o método imprime(). Então o caso do for não é uma característica do Polimorfismo?

1 resposta

Darciane, boa noite. Funciona mesmo, pois como o Python é uma linguagem dinâmica ele aceita que você atribua tipos diferentes dentro de uma list. A questão aqui é que você poderia escrever menos código se reaproveitasse o que ambas as classes tem em comum (como nome e ano) criando uma classe pai e herdando em ambas as classes filhas e sobreescrevendo o método str para somente imprimir o que elas tem de diferente da classe pai.