O que mudou foi o seguinte, não coloquei o "def" na classe programa, com isso não precisei por ._nome e ._ano
quando fiz os atributos imprime nas classes Filme e Serie.
class Programa:
def __init__(self, nome, ano):
self.__nome = nome.title()
self.ano = ano
self.__likes = 0
@property
def likes(self):
return self.__likes
def darlike(self):
self.__likes += 1
@property
def nome(self):
return self.__nome
@nome.setter
def nome(self, novo_nome):
self.__nome = novo_nome.title()
# \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
class Filme(Programa):
def __init__(self, nome, ano, duracao):
super().__init__(nome, ano)
self.duracao = duracao
def imprime(self):
print(f'Nome: {self.nome} - Ano: {self.ano} - Duração: {self.duracao} - Likes: {self.likes}')
# \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
class Serie(Programa):
def __init__(self, nome, ano, temporadas):
super().__init__(nome, ano)
self.temporadas = temporadas
def imprime(self):
print(f'Nome: {self.nome} - Ano: {self.ano} - Duração: {self.temporadas} - Likes: {self.likes}')
# \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
vingadores = Filme('Vingadores - guerra infinita', 2018, 160)
atlanta = Serie('atlanta', 2018, 2)
vingadores.darlike()
vingadores.darlike()
vingadores.darlike()
atlanta.darlike()
atlanta.darlike()
filmes_e_series = [vingadores, atlanta]
for programa in filmes_e_series:
programa.imprime()
Resultado da execução ficou:
C:\Users\Administrador\AppData\Local\Programs\Python\Python38-32\python.exe C:/Users/Administrador/Documents/Programação/Python/OO2/modelo.py
Nome: Vingadores - Guerra Infinita - Ano: 2018 - Duração: 160 - Likes: 3
Nome: Atlanta - Ano: 2018 - Duração: 2 - Likes: 2
Process finished with exit code 0