Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Mão na Massa

Boa tarde!

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'


# class Playlist(list):  # Declara a herança da classe list
#     def __init__(self, nome, programas):
#         self.__nome = nome
#         super().__init__(programas)

class Playlist:
    def __init__(self, nome, programas):
        self.nome = nome
        self._programas = programas

    @property
    def listagem(self):
        return self._programas

    @property
    def tamanho(self):
        return len(self._programas)


vingadores = Filme('vingadores: guerra infinita', 2018, 160)
atlanta = Serie('atlanta', 2018, 2)
tmep = Filme('todo mundo em pânico', 1999, 100)
demolidor = Serie('Demolidor', 2016, 2)

vingadores.dar_likes()
tmep.dar_likes()
tmep.dar_likes()
demolidor.dar_likes()
demolidor.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,  demolidor, tmep]

fim_de_semana = Playlist("Fim de Semana", lista)

print(f"Tamanho da Playlist: {fim_de_semana.tamanho} itens")
for programa in fim_de_semana.listagem:
    print(programa)
1 resposta
solução!

Oii João,

Fico feliz por ver o seu desenvolvimento, continue compartilhando com a comunidade do fórum sempre.

Em caso de dúvidas encontro-me à disposição.

Abraços e bons estudos.