1
resposta

Classe object e super(classe_filha, self).

Vi em outros vídeos que assisti que é boa pratica sempre criarmos uma classe que não tem sub-classes como uma classe-filha da classe object do python. O vídeo era de 2014 então fiquei na dúvida se isso mudou nas versões mais recentes.

class Programa(object):
    pass

Outra coisa era quando utilizarmos a função super() para as classes-filhas, passar o nome da classe-filha e o self como argumento. Devemos?

class Programa:

  def __init__(self, nome, ano):
    self._nome = nome.title()
    self.ano = ano
    self._likes = 0

class Series(Programa):

  def __init__(self, nome, ano, temporada):
    super(Series, self).__init__(nome, ano)
    self.temporada = temporada

Obrigada!!

1 resposta

Oii Darciane, como você está? Espero que esteja bem ^-^

Muito interessante sua pergunta.

Dizer nitidamente que a classe herda de object vem da versão 2 do python e não é mais necessária. Atualmente, no python 3 não é necessário dizer explicitamente que uma classe herda de object, pois padrão a classe já herda de object. Ou seja, no python 3, escrever class Animal(object) e class Animal são iguais. Geralmente você verá códigos escritos sem o object. Exemplo:

class Animal:
     pass

Quanto ao uso dos argumentos do nome da classe e do self ao utilizar o super, também é algo que não é mais necessário no python 3. Essa prática é da versão 2 do python. No python 3 basta fazermos da seguinte forma: super().__init__().

Vamos a um exemplo:

  • Imagine uma classe Pessoa que possui como argumento nome e idade:
class Pessoa:
  def __init__(self, nome, idade):
    self.nome = nome
    self.idade = idade

  def __str__(self):
    return f'Pessoa: {self.nome} - {self.idade}'
  • Agora, vamos a classe Funcionarioque herda da classe Pessoa. Que além de nome e idade, também possui um cargo. Observe como fica a chamada do método super:
class Funcionario(Pessoa):
  def __init__(self, nome, idade, cargo):
    super().__init__(nome, idade) # chamada do método super passando como parâmetro os argumentos que a classe Pessoa recebe
    self.cargo = cargo

As formas ditas acimas são válidas para o python 3 e são consideradas boas práticas.

Se tiver ficado alguma dúvida é só falar, tá? Estou por aqui.

Grande abraço!