Bom dia. Segue meu 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()
# 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
class Serie(Programa):
def __init__(self, nome, ano, temporadas):
super().__init__(nome, ano)
self.temporadas = temporadas
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}")