Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Mão na massa 12 - Python 3 Avançado OO (Dúvida)

Código e dúvida: a saída informa 4 itens, porém Vingadores aparece novamente. Como faço para eliminar ele?

from abc import ABCMeta, abstractmethod

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 dar_likes(self):
        self._likes += 1

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

    @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'

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

    def __str__(self):
       return f'Nome: {self._nome} - Ano: {self.ano} - Duração: {self.duracao} min - Likes: {self._likes}'

class Serie(Programa):
    def __init__(self, nome, ano, temporadas):
        super().__init__(nome, ano)
        self.temporadas = temporadas

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

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)
vingadores.dar_likes()
vingadores.dar_likes()
vingadores.dar_likes()

o_iluminado = Filme('o iluminado', 1980, 160)
o_iluminado.dar_likes()
o_iluminado.dar_likes()
o_iluminado.dar_likes()
o_iluminado.dar_likes()
o_iluminado.dar_likes()

atlanta = Serie('atlanta', 2018, 2)
atlanta.dar_likes()
atlanta.dar_likes()

braking_bad = Serie('braking bad', 2008, 5)
braking_bad.dar_likes()
braking_bad.dar_likes()
braking_bad.dar_likes()
braking_bad.dar_likes()
braking_bad.dar_likes()

filmes_e_series = [vingadores, atlanta, braking_bad, o_iluminado]
minha_playlist = Playlist('fim de semana', filmes_e_series)

print(f'Tamanho da Playlist: {len(minha_playlist)}')

for programa in minha_playlist:
    print(programa)

print(f'tamanho: {len(minha_playlist)}')
print(minha_playlist[0])

Resultado

C:\Users\Jéssica\PycharmProjects\python3oo2\venv\Scripts\python.exe C:/Users/Jéssica/PycharmProjects/python3oo2/modelo.py Tamanho da Playlist: 4 Nome: Vingadores - Guerra Infinita - Ano: 2018 - Duração: 160 min - Likes: 3 Nome: Atlanta - Ano: 2018 - Temporadas: 2 - Likes: 2 Nome: Braking Bad - Ano: 2008 - Temporadas: 5 - Likes: 5 Nome: O Iluminado - Ano: 1980 - Duração: 160 min - Likes: 5 tamanho: 4 Nome: Vingadores - Guerra Infinita - Ano: 2018 - Duração: 160 min - Likes: 3 #duplicado

Process finished with exit code 0

Código ABC.py

from collections.abc import MutableSequence

class MinhaListinhaMutavel(MutableSequence):
    pass

objetoValidado = MinhaListinhaMutavel()
print(objetoValidado)

Resultado:

C:\Users\Jéssica\PycharmProjects\python3oo2\venv\Scripts\python.exe C:/Users/Jéssica/PycharmProjects/python3oo2/main.py Traceback (most recent call last): File "C:\Users\Jéssica\PycharmProjects\python3oo2\main.py", line 6, in objetoValidado = MinhaListinhaMutavel() TypeError: Can't instantiate abstract class MinhaListinhaMutavel with abstract methods delitem, getitem, len, setitem, insert

Process finished with exit code 1

2 respostas
solução!

Referente a duplicação do nome dos vingadores na lista, acontece por que você colocou no final, exatamente na ultima linha um comando print(minha_playlist[0]) , esse comando manda o computador imprimir na tela o primeiro item da lista. Para resolver esse problema basta comentar ou apagar essa linha que não duplicará mais o nome dos vingadores na execução.

Putz, kkkkkkkkkkkkk, muito obrigado! Problema resolvido.