Я новичок в питоне. Я не могу понять наследование и __init__()
.
class Num:
def __init__(self,num):
self.n1 = num
class Num2(Num):
def show(self):
print self.n1
mynumber = Num2(8)
mynumber.show()
РЕЗУЛЬТАТ: 8
Хорошо. Но я заменяю Num2
на
class Num2(Num):
def __init__(self,num):
self.n2 = num*2
def show(self):
print self.n1,self.n2
РЕЗУЛЬТАТ: Error. Num2 has no attribute "n1".
В таком случае как получить Num2
доступ n1
?
python
inheritance
init
Юго Камо
источник
источник
__init__
метод не определяется в производном классе, он наследуется. Это потому, что «если запрошенный атрибут не найден в классе, поиск продолжается в базовом классе». (doc)super(Num2, self).__init__(num)
?super
, и теперь моя программа загружается на несколько секунд быстрее. Понятия не имею почему.super
должен быть полезен при использовании множественного наследования. Для единоличного наследования его преимущества не очевидны.Когда вы переопределяете init, вам также необходимо вызвать init родительского класса
Понимание Python super () с помощью методов __init __ ()
источник
Поскольку вы не вызываете
Num.__init__
, поле «n1» никогда не создается. Назовите это, и тогда оно будет там.источник
Простое изменение в классе Num2, например:
Он работает в 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()
источник