Saya pemula dari python. Saya tidak dapat memahami warisan dan __init__()
.
class Num:
def __init__(self,num):
self.n1 = num
class Num2(Num):
def show(self):
print self.n1
mynumber = Num2(8)
mynumber.show()
HASIL: 8
Ini bagus. Tapi saya ganti Num2
dengan
class Num2(Num):
def __init__(self,num):
self.n2 = num*2
def show(self):
print self.n1,self.n2
HASIL: Error. Num2 has no attribute "n1".
Dalam hal ini, bagaimana cara Num2
mengakses n1
?
python
inheritance
init
Yugo Kamo
sumber
sumber
__init__
metode dalam kelas turunan, kutipan itu akan diwarisi. Itu karena "jika atribut yang diminta tidak ditemukan di kelas, pencarian dilanjutkan untuk mencari di kelas dasar." (doc)super(Num2, self).__init__(num)
?super
, dan program saya sekarang memuat beberapa detik lebih cepat. Tidak tahu kenapa.super
seharusnya berguna saat menggunakan banyak warisan. Untuk warisan tunggal, manfaatnya tidak jelas.Saat Anda mengganti init, Anda juga harus memanggil init dari kelas induk
Memahami Python super () dengan metode __init __ ()
sumber
Karena Anda tidak menelepon
Num.__init__
, bidang "n1" tidak pernah dibuat. Sebut saja dan kemudian akan ada di sana.sumber
Perubahan sederhana di kelas Num2 seperti ini:
Ia bekerja di 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()
sumber