Olá, boa noite! Ainda não consegui entender o motivo da necessidade de chamar o construtor super().
class Playlist(list):
def __init__(self, nome, programas):
self.nome = nome
super().__init__(programas)
Olá, boa noite! Ainda não consegui entender o motivo da necessidade de chamar o construtor super().
class Playlist(list):
def __init__(self, nome, programas):
self.nome = nome
super().__init__(programas)
O super()
chama a classe "pai", que no caso é o list
. Então você está acessando o construtor do list
.
Sem isso, você até teria as funcionalidades do list
, mas não teria inicializado o valor.
Exemplo:
class MyList(list):
def __init__(self, name):
self.name = name
oo = MyList('Lista')
print(oo.name)
print(oo)
print(len(oo))
oo.append('valor')
print(oo)
print(len(oo))
continuo com a mesma duvida acerca do super()
Sem problemas. Usando o código que o Ramon fez, fiz alguns exemplos:
class Playlist(list):
def __init__(self, nome, programas):
self.nome = nome
super().__init__(programas)
class PlaylistSemSuper(list):
def __init__(self, nome, programas):
self.nome = nome
self.programas = programas
class PlaySemList:
def __init__(self, nome, programas):
self.nome = nome
self.programas = programas
playlist = Playlist('foo', ['filme', 'série', 'novela'])
print(playlist.nome, playlist)
# Resposta: foo ['filme', 'série', 'novela']
playlist = PlaylistSemSuper('foo', ['filme', 'série', 'novela'])
print(playlist.nome, playlist, playlist.programas)
# Resposta: foo [] ['filme', 'série', 'novela']
playlist = PlaySemList('foo', ['filme', 'série', 'novela'])
print(playlist.nome, playlist, playlist.programas)
# Resposta: foo <__main__.PlaySemList object at 0x10ab06fa0> ['filme', 'série', 'novela']
Nesses 3 exemplos que foram passados, podemos ver que só quem estendeu o list
(usando (list)
), se comporta como uma list
. Também vimos que só quem usou o super()
, teve o valor iniciado. No caso, o PlaylistSemSuper
tem o comportamento de list
, mas não iniciou o valor, e por isso está como uma list
vazia. Basicamente você usa o super()
para poder acessar coisas da classe que está estendendo.
Segue um outro exemplo que explora o uso de múltiplas classes e os métodos delas:
class Cachorro:
def latir(self):
print("au")
def fazer_barulho(self):
self.latir()
class Gato:
def miar(self):
print('miai')
def fazer_barulho(self):
self.miar()
class Quimera(Cachorro, Gato):
def fazer_barulho(self):
super().fazer_barulho()
super().miar()
super().latir()
quimera = Quimera()
quimera.fazer_barulho()
# Resultado: au
# miai
# au