1
resposta

Meu exemplo do código mãos na massa

# Classe programa

from abc import ABCMeta, abstractmethod


class Programa(metaclass = ABCMeta):
    def __init__(self,nome,ano):
        self._nome = nome.title()
        self.ano =ano
        self._likes = 0


    @property
    def likes(self):
        return self._likes


    @property
    def nome(self):
        return self._nome


    def dar_like(self):
        self._likes += 1


    @nome.setter
    def nome(self,novo_nome):
        self._nome = novo_nome.title()


    @abstractmethod
    def __str__(self):
        return f'{self._nome} - {self.ano} - {self._likes} Likes'


# Classe filme
class Filme(Programa):
    def __init__(self,nome,ano,duracao):
        super().__init__(nome,ano)
        self.duracao = duracao


    def __str__(self):
        return f'Nome: {self._nome} - {self.duracao} min - Likes: {self._likes}'


# Classe série
class Serie(Programa):
    def __init__(self,nome,ano,temporadas):
        super().__init__(nome,ano)
        self.temporadas =temporadas


    def __str__(self):
        return f'Nome: {self._nome} - {self.temporadas} temporadas - Likes: {self._likes}'


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


    def __getitem__(self, item):
        return self._programas[item]


    def __len__(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_like()
tmep.dar_like()
tmep.dar_like()
tmep.dar_like()
tmep.dar_like()
demolidor.dar_like()
demolidor.dar_like()
atlanta.dar_like()
atlanta.dar_like()
atlanta.dar_like()

filmes_e_series = [vingadores, atlanta, demolidor, tmep]
playlist_fim_de_semana = Playlist('fim de semana', filmes_e_series)


for programa in playlist_fim_de_semana:
    print(programa)

print(f'Tamanho: {len(playlist_fim_de_semana)}')
print(playlist_fim_de_semana[0])

# Resultado
[Running]
Nome: Vingadores - Guerra Infinita - 160 min - Likes: 1
Nome: Atlanta - 2 temporadas - Likes: 3
Nome: Demolidor - 2 temporadas - Likes: 2
Nome: Todo Mundo Em P�nico - 100 min - Likes: 4
Tamanho: 4
Nome: Vingadores - Guerra Infinita - 160 min - Likes: 1

[Done] exited with code=0 in 0.269 seconds

# Arquivo testeAbc.py
# Teste de uma classe com método requisitado

from collections.abc import MutableSequence


class MinhaListinhaMutavel(MutableSequence):
    pass


objeto_validado = MinhaListinhaMutavel()
print(objeto_validado)

# Resultado
[Running]
Traceback (most recent call last):
  File "d:\Douglas\Cursos\cursos_Alura\Python\Python 3 parte 4 avan�ando na orienta��o a objetos\exercicios_python\testeAbc.py", line 10, in <module>
    objeto_validado = MinhaListinhaMutavel()
TypeError: Can't instantiate abstract class MinhaListinhaMutavel with abstract methods __delitem__, __getitem__, __len__, __setitem__, insert

[Done] exited with code=1 in 0.37 seconds

1 resposta

Olá Douglas,

Fico feliz que tenha compartilhado com a comunidade do fórum Alura o seu desenvolvimento. Continue contando sempre com o fórum.

Meus parabéns pela implementação do código.

Fico à disposição em caso de dúvidas.