1
resposta

Metodo Dunder

Pq deu certo ao chamar a super classe, nas classes filhas sem usar o Super() ?

1 resposta

Bruno,

O super() é utilizado entre heranças de classes, ele nos proporciona estender/subscrever métodos de uma super classe (classe pai) para uma sub classe (classe filha), através dele definimos um novo comportamento para um determinado método construído na classe pai e herdado pela classe filha. Para entender melhor, considere o código abaixo como exemplo:

class Pai(object):
  def __init__(self):
    print('Construindo a classe Pai')


class Filha(Pai):
  def __init__(self):
    super().__init__()

No exemplo acima, temos uma sub classe que herda da super classe e utiliza o super() para chamar o método construtor da classe Pai em seu próprio método construtor. Isso nos proporciona uma melhor manutenibilidade do código, tendo em vista que se usássemos de forma direta como no exemplo abaixo:

class Pai(object):
 def __init__(self):
    print('Construindo a classe Pai')


class Filha(Pai):
 def __init__(self):
    Pai.__init__(self)

Teriamos um acesso ao método construtor da classe Pai de uma forma amarrada, onde se caso precisássemos modificar a classe herdada, teríamos mais trabalho tendo que modificar em vários outros lugares a mesma, como exemplificado abaixo:

class Pai(object):
 def __init__(self):
    print('Construindo a classe Pai')


class Mae(object):
 def __init__(self):
    print('Construindo a classe Mae')


class Filha(Mae):
 def __init__(self):
    Pai.__init__(self)

O código acima executa o método construtor independente da super classe que a sub classe esteja herdando. Quando precisamos estender métodos da super classe na sub classe, também podemos usar o super() a nosso favor. Imagine que precisamos passar novos parâmetros para um método já existente, poderíamos fazer dessa forma:

class Pai(object):
  def __init__(self, peso, altura):
     self.peso = peso
     self.altura = altura


class Filha(Pai):
  def __init__(self, peso, altura, cabelo):
     super().__init__(peso, altura)
     self.cabelo = cabelo

Conforme visto aqui, o super() é algo essencial no dia a dia de um programador python, proporcionando de forma simples e objetiva subscrever/estender métodos a nosso favor.

FONTE: https://www.caelum.com.br/apostila-python-orientacao-objetos/heranca-e-classes-abstratas/

https://pt.stackoverflow.com/questions/375788/dúvida-sobre-inicialização-de-classe-derivada-em-python