1
resposta

Mãos na Massa

Bom dia! 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'


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}")

lista = [vingadores, atlanta]

for programa in lista:
    print(programa)
1 resposta

Olá João,

Excelente uso do dunder método __str__.

Deixo aqui uma recomendação de leitura, um artigo que apresenta um pouco sobre os dunder methods ou métodos mágicos.

O artigo está em inglês, caso tenha dificuldades com o idioma recomendo o uso do tradutor do navegador.

Bons estudos.