1
resposta

Dúvida sobre a colocação do Método __str__

Essa aula conseguiu apresentar de uma forma rápida e direta como utilizar a Função __str__, porém fiquei com uma dúvida em relação ao lugar onde o Método foi inserido.

Além dele constar nas duas Subclasses (que faz todo o sentido, levando em consideração o objetivo da existência desse Método), ele também foi mantido na Superclasse.

Isso não configura uma redundância, já que todo o exemplo que estamos trabalhando até aqui sempre irá criar Objetos que estão necessariamente alocados nas Subclasse?

1 resposta

Olá Gustavo, tudo bem com você?

Peço desculpas pela demora no retorno.

No projeto da aula a implementação do método __str__ na superclasse (classe mãe) Programa será necessária, pois, assim, definimos uma representação em string padrão para as classes que herdam dela. O que é útil caso o código passe por refatoração adicionando mais subclasses (classes filhas).

Por uma questão de didática, o instrutor optou por sobrescrever o método __str__ herdado da classe mãe, já que, cada classe necessita de uma representação em string customizada.

Quando declaramos o método __str__ na superclasse (classe mãe) esse método ficará disponível para todas as suas subclasses (classes filhas), até que esse método seja sobrescrito na classe filha. Assim, caso em algum momento uma classe filha não implemente o método __str__, será feito o uso do método herdado da classe mãe. Como no exemplo abaixo:

class Programas:
    def __init__(self, nome, ano):
        self._nome = nome.title()
        self.ano = ano
        self._like = 0

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

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

obj_vingadores = Filme('vingadores', 2018, 160)

print(obj_vingadores)

Resultado

Nome: Vingadores - Ano: 2018 - Likes: 0

Note que na classe filha Filme não foi implementado o método __str__, assim, ao realizarmos a impressão do objeto, é chamado o método __str__ da classe mãe.

Espero ter lhe ajudado. Em caso de dúvidas estou à disposição.

Não hesite em voltar ao fórum para continuar aprendendo e interagindo com a comunidade.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software