Eu sou o iniciante do python. Eu não consigo entender herança e __init__()
.
class Num:
def __init__(self,num):
self.n1 = num
class Num2(Num):
def show(self):
print self.n1
mynumber = Num2(8)
mynumber.show()
RESULTADO: 8
Isso está bem. Mas eu substituo Num2
por
class Num2(Num):
def __init__(self,num):
self.n2 = num*2
def show(self):
print self.n1,self.n2
RESULTADO: Error. Num2 has no attribute "n1".
Nesse caso, como pode Num2
acessar n1
?
python
inheritance
init
Yugo Kamo
fonte
fonte
__init__
método em uma classe derivada, ele é herdado. É porque "se um atributo solicitado não for encontrado na classe, a pesquisa prossegue para procurar na classe base." (doc)super(Num2, self).__init__(num)
?super
, e meu programa agora carrega alguns segundos mais rápido. Não faço ideia do porquê.super
deve ser útil ao usar herança múltipla. Para herança única, seus benefícios não são óbvios.Quando você sobrescreve o init você também tem que chamar o init da classe pai
super(Num2, self).__init__(num)
Compreendendo Python super () com métodos __init __ ()
fonte
Como você não chama
Num.__init__
, o campo "n1" nunca é criado. Ligue e então estará lá.fonte
Uma mudança simples na classe Num2 como esta:
super().__init__(num)
Funciona em python3.
class Num: def __init__(self,num): self.n1 = num class Num2(Num): def __init__(self,num): super().__init__(num) self.n2 = num*2 def show(self): print (self.n1,self.n2) mynumber = Num2(8) mynumber.show()
fonte