Trabalhar com herança nos permite herdar métodos e atributos de uma classe Pai em uma classe Filha, em python fazemos isso chamando o método construtor da classe Pai dentro do método construtor da classe Filha, podemos fazer isso de duas maneiras, a primeira de forma explícita onde informamos o nome da classe Pai na hora de chamar o método construtor da mesma, vamos ver um exemplo.


class Pai():
  def __init__(self, nome, peso, altura) -> None:
      self.nome = nome
      self.peso = peso
      self.altura = altura

class Filha(Pai):
  def __init__(self, nome, peso, altura, cabelo) -> None:
      Pai.__init__(self, nome, peso, altura)
      self.cabelo = cabelo


Trabalhar desta forma pode nos proporcionar muito trabalho caso venhamos fazer uma alteração no nome da classe Pai ou até mesmo se decidirmos herdar de outra classe, se a classe Pai for herdada por várias classes Filhas termos que fazer alterações em várias partes do código.


A segunda opção e também a mais recomendada é utilizarmos o super() para chamar o método construtor de forma implícita, o super() é utilizado em python entre heranças de classes, ele nos permite extender ou subscrever métodos herdados de uma classe pai em uma classe filha, devemos colocá lo dentro do método construtor da classe filha e através dele chamar o método construtor da classe pai junto com seus atributos, vamos ver um exemplo.


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

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



No exemplo acima a classe Filha herda da classe Pai, utilizamos o super para chamarmos o método construtor da classe Pai, perceba que a classe Filha tem um atributo a mais que é altura, que definimos ele normalmente com o self.


Se decidirmos criar uma nova classe Mae e fazer com que a filha herde dela, não vamos precisar alterar várias partes do código, o que facilitaria muito a manutenção.


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

class Mae():
    def __init__(self, nome, peso, altura):
      self.nome = nome
      self.peso = peso
      self.altura = altura

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



No próximo exemplo vamos ver como utilizar o super para subscrever um método da classe Pai em uma classe Filha.


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

  def fala(self):
      return 'olá'

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

  def fala(self):
      return super().fala() + ' eu sou o filho'


Devemos nomear o método que será subscrito na classe Filha com o mesmo nome do método da classe Pai, então chamamos o super dentro do método e realizamos a alteração de acordo com oque desejamos.




 

Comentários

Postagens mais visitadas deste blog

A função print