Bom dia! Segue código para avaliação. Obrigado!
class Programa:
def __init__(self, nome, ano):
self._nome = nome.title()
self.ano = ano
self._likes = 0
def dar_likes(self):
self._likes += 1
@property
def likes(self):
return self._likes
@property
def nome(self):
return self._nome
@nome.setter
def nome(self, novo_nome):
self._nome = novo_nome.title()
def __str__(self):
return f'{self._nome}, {self.ano} - {self._likes} Likes'
# Em herança, quando se usa atributos privados não são herdados pela classe filha
# Para solucionar isso, ao invés do duplo underscore, use um simples underscore
# O python não vai fazer o name mangling e essa forma de nomear é uma convenção
# A resolução correta pra evitar duplicação é usar o método super().__init__(argumentos da classe mae sem self)
# Exeplo:
# class ParentClass:
# def __init__(self, pcatt1, pcatt2):
# self.pcatt1 = pcatt1
# self.pcatt2 = pcatt2
# class ChildClass(ParentClass):
# def __init__(self, pcattr1, pcattr2, ccatt1, ccatt2):
# super().__init__(pcatt1, pcatt2)
# self.ccatt1 = ccatt1
# self.ccatt2 = ccatt2
class Filme(Programa):
def __init__(self, nome, ano, duracao):
super().__init__(nome, ano)
self.duracao = duracao
def __str__(self):
return f'{self._nome} - {self.ano} - {self.duracao} min - {self._likes} Likes'
class Serie(Programa):
def __init__(self, nome, ano, temporadas):
super().__init__(nome, ano)
self.temporadas = temporadas
def __str__(self):
return f'{self._nome} - {self.ano} - {self.temporadas} temporadas - {self._likes} Likes'
vingadores = Filme('vingadores: guerra infinita', 2018, 160)
atlanta = Serie('atlanta', 2018, 2)
vingadores.dar_likes()
vingadores.dar_likes()
vingadores.dar_likes()
atlanta.dar_likes()
atlanta.dar_likes()
# print(f"{vingadores.nome} - {vingadores.duracao}: {vingadores.likes}")
# print(f"{atlanta.nome} - {atlanta.temporadas}: {atlanta.likes}")
lista = [vingadores, atlanta]
for programa in lista:
print(programa)