1
resposta

sobre o super()

nesta aula aqui: https://cursos.alura.com.br/course/python-3-avancando-orientacao-objetos/task/41787

vi o uso do super() para resolver um problema para fazer com que um obj seja lido como uma lista.

mas, pelo que percebi até agora do super() utilizado no resto do código, ele herdou de uma outra classe (o nome e o ano da superclasse).

porém, nesse caso foi usado assim:

class Playlist(list):
    def __init__(self, nome, programas):
        self.nome = nome
        super().__init__(programas)

e nesse super(), não tem uma outra classe que a usou antes para herdar, e mesmo assim funcionou, e não entendi o porque funcionou. nos casos anteriores, a outra classe (a superclasse) tenha já definido o "nome" e "ano", mas o "programas" só foi utilizado pela primeira vez agora, e através do super().

Estou confuso no uso do super() para esse caso e porque funcionou.

1 resposta

Olá Marcos, tudo bem com você?

Peço desculpas pela demora em lhe responder.

O list é uma função built-in do Python, como apresentado na documentação do python ela também é uma classe, assim podemos trabalhar com a herança de classe, herdando o comportamento dessa classe.

Quando a criamos a classe Playlist queremos que ela possua comportamentos presentes em uma lista, uma alternativa seria implementarmos todos os métodos presentes na classe list ou como alternativa mais prática, podemos fazer o uso da herança de classes, assim a nossa classe Playlist será uma classe filha da classe list. Como apresentado no código abaixo.

class Playlist(list):
    def __init__(self, nome, programas):
        self.nome = nome
        super().__init__(programas)

Quando trabalhamos com herança de classe, será necessário utilizarmos o super() quando a classe filha possuir um método inicializador (__ init__) pois a classe filha que possui um método inicializador irá sobrescrever o método inicializador da classe mãe , como é no nosso caso.

No nosso código, no momento em que a classe Playlist é instanciada o método inicializador dela é executado e temos que informar dois atributos, sendo, nome e programas. O primeiro atributo será salvo na classe filha (self.nome) o segundo atributo, que no nosso caso será uma lista que deverá ser utilizado no método inicializador da classe mãe (list), assim fazemos o uso do super().__init__(programas).

Após realizarmos essa inicialização, a nossa classe irá possuir um atributo nome e um atributo programas que herdou todos os métodos da classe list, adquirindo assim o comportamento de lista.

Em resumo temos que a herança de classe é realizada de uma classe já existente internamente no Python, nesse caso a classe list.

Fico à disposição em caso de dúvidas.

Abraços e bons estudos.

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