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

Utilização do super em construtor

Boa Noite pessoal, tem o seguinte código de exercício

class Conta(object):
    def __init__(self, titular, saldo):
        self.titular = titular
        self.saldo = saldo


    def calcular_imposto(self): 
        self.saldo = self.saldo * 0.10
        return self.saldo


class ContaCorrente(Conta):
    def __init__(self, titular, saldo):
        super(ContaCorrente, self).__init__(titular, saldo)

    def calcular_imposto(self):
        return super(ContaCorrente, self).calcular_imposto() + 20

Porem eu não compreendi o por que da utilização do construtor na Classe ContaCorrente :

 def __init__(self, titular, saldo):
        super(ContaCorrente, self).__init__(titular, saldo)

Já que ele não cria mais nenhum outro atributo...

Alguém pode me ajudar ?

Obrigado,

João Vitor

5 respostas

Mesmo não criando novos atributos na classe ContaCorrente (classe filha), para a herança "funcionar" você deve invocar o construtor da classe pai (caso a classe fillha não tenha construtores para novos atributos).No caso específico, mesmo sem ter novos atributos, para criar um novo objeto da classe ContaCorrente você deve invocar o método construtor da classe da qual ela herda, no caso, Conta. Foi claro? Esses assuntos de herança são invariavelmente um pouco "embaraçosos" de entender e mesmo explicar. Rs.

João, quando a classe filha possui o mesmo construtor da classe pai, não é necessário fazer o super, é opcional. Eu gosto de explicitar:

Sendo assim, seu código funciona assim:

class Conta(object):
    def __init__(self, titular, saldo):
        self.titular = titular
        self.saldo = saldo


    def calcular_imposto(self): 
        self.saldo = self.saldo * 0.10
        return self.saldo


class ContaCorrente(Conta):

    def calcular_imposto(self):
        return super(ContaCorrente, self).calcular_imposto() + 20

Agora, se a classe filha recebe mais um parâmetro no construtor, ai temos que chamar o construtor de 2 parâmetros do pai. Ai o uso de super não é opcional.

Tudo bem?

solução!

João, criei um exercício que explica isso com detalhes. Você pode estrea-lo agora! É que eu gosto de explicitar.

https://cursos.alura.com.br/course/introducao-ao-python/task/22616

Sucesso e bom estudo meu aluno!

Oi João. Tudo certo?

Olá Flavio,

Obrigado pela ajuda, ficou muito boa a explicação, obrigado mesmo.

Abraços professor.