Dalam jawaban Anon:
"Jika Anda perlu sesuatu dari super __init__
untuk dilakukan selain apa yang sedang dilakukan di kelas saat ini __init__
, Anda harus menyebutnya sendiri, karena itu tidak akan terjadi secara otomatis"
Sungguh luar biasa: dia mengatakan persis kebalikan dari prinsip pewarisan.
Bukannya bahwa "sesuatu dari super __init__
(...) tidak akan terjadi secara otomatis" , itu bahwa itu AKAN terjadi secara otomatis, tetapi itu tidak terjadi karena kelas-dasar ' __init__
ditimpa oleh definisi dari turunan-clas__init__
Jadi, MENGAPA mendefinisikan diturunkan_klas ' __init__
, karena itu menimpa apa yang ditujukan ketika seseorang resor untuk warisan ??
Itu karena seseorang perlu mendefinisikan sesuatu yang TIDAK dilakukan di kelas dasar ' __init__
, dan satu-satunya kemungkinan untuk memperolehnya adalah dengan menempatkan eksekusi dalam __init__
fungsi kelas turunan' .
Dengan kata lain, seseorang perlu sesuatu di kelas dasar ' __init__
selain apa yang akan secara otomatis dilakukan di kelas dasar' __init__
jika yang terakhir ini tidak diganti.
BUKAN sebaliknya.
Kemudian, masalahnya adalah bahwa instruksi yang diinginkan hadir di kelas dasar ' __init__
tidak lagi diaktifkan pada saat instantiation. Untuk mengimbangi inaktivasi ini, diperlukan sesuatu yang khusus: memanggil kelas dasar secara eksplisit ' __init__
, untuk MENJAGA , BUKAN TAMBAH, inisialisasi dilakukan oleh kelas-dasar' __init__
. Itulah tepatnya yang dikatakan dalam dokumen resmi:
Metode utama dalam kelas turunan mungkin sebenarnya ingin memperluas daripada hanya mengganti metode kelas dasar dengan nama yang sama. Ada cara sederhana untuk memanggil metode kelas dasar secara langsung: panggil saja BaseClassName.methodname (mandiri, argumen).
http://docs.python.org/tutorial/classes.html#inheritance
Itu saja ceritanya:
ketika tujuannya adalah untuk MENJAGA inisialisasi yang dilakukan oleh kelas-dasar, yaitu pewarisan murni, tidak ada yang istimewa diperlukan, seseorang hanya harus menghindari untuk mendefinisikan suatu __init__
fungsi dalam kelas turunan
ketika tujuannya adalah untuk MENGGANTI inisialisasi yang dilakukan oleh kelas-dasar, __init__
harus didefinisikan dalam kelas turunan
ketika tujuannya adalah untuk ADD proses ke inisialisasi yang dilakukan oleh kelas-dasar, kelas turunan ' __init__
harus didefinisikan, terdiri dari panggilan eksplisit ke kelas-dasar__init__
Apa yang saya rasa mencengangkan dalam jabatan Anon bukan hanya bahwa ia mengungkapkan kebalikan dari teori pewarisan, tetapi bahwa ada 5 orang yang lewat yang dipungut suara tanpa mengubah rambut, dan terlebih lagi tidak ada yang bereaksi dalam 2 tahun di utas yang subjek yang menarik harus dibaca relatif sering.
object
adalah kesalahan ketik. Tetapi sekarang Anda bahkan tidak memilikisuper
judul yang merujuk pada pertanyaan Anda.