Warisan Python

Warisan Python

Pengenalan

Warisan adalah satu lagi konsep utama dalam pengaturcaraan berorientasikan objek, dan memainkan peranan penting dalam membina kelas. Ia membolehkan kelas didasarkan pada yang ada.

Ketika anda mula -mula menulis kelas python, anda diberitahu untuk meletakkan "objek" dalam kurungan definisi kelas dan tidak terlalu memikirkannya. Nah, sekarang adalah masa untuk mula memikirkannya.

"Objek" sebenarnya adalah kelas asas yang semua kelas python mewarisi dari. Ia mentakrifkan satu set asas fungsi yang sepatutnya dimiliki oleh semua kelas python. Dengan mewarisi daripadanya apabila anda membuat kelas baru, anda memastikan bahawa kelas itu mempunyai fungsi asas yang.

Singkatnya, warisan adalah cara yang baik untuk mengkategorikan kelas dan memastikan bahawa anda tidak perlu mengulangi diri anda sendiri.

Apa itu warisan?

Warisan juga wujud di dunia nyata. Pasangan panduan pertama menggunakan kereta sebagai contoh kelas. Nah, bagaimana jika anda mahukan jenis kereta yang lebih spesifik yang semuanya berkongsi prinsip asas kereta? Warisan boleh membantu.

Anda boleh memulakan dengan kelas "kereta" asas yang mempunyai semua sifat yang setiap saham kereta. Ini semua akan menjadi sangat umum.

Setelah anda mempunyai "kereta" anda, anda boleh membuat kelas baru dan menyampaikannya "Kereta."Mereka semua akan mempunyai sifat yang sama seperti kelas" kereta "asas. Kemudian, anda boleh menambah sebarang sifat tambahan yang anda mahu ke kelas yang lebih khusus. Sebagai contoh, anda boleh mempunyai kelas "trak," "kereta otot," dan "SUV" yang semuanya mewarisi dari "kereta."

Apabila anda memikirkannya dalam istilah dunia sebenar, trak, kereta otot, dan SUV semuanya mempunyai sifat asas yang sama seperti mana -mana kereta lain, tetapi mereka juga mempunyai sifat khusus.

Anda juga boleh mengkhususkan diri. Terdapat banyak jenis trak. Jadi, anda boleh membuat lebih banyak kelas khusus yang mewarisi dari "trak."Semua kehendaknya bermula dengan segala bentuk" kereta "dan segala -galanya dari" trak."

Menggunakan Warisan di Python

Baiklah, jadi sekarang anda boleh mencuba ini dengan beberapa kod sebenar. Sediakan kelas "kereta" asas yang mewarisi dari "objek."Cuba bekerjasama dengan contoh di bawah.

kereta kelas (objek): def __init __ (diri, membuat = 'ford', model = 'pinto', tahun = '1971', jarak tempuh = 253812, warna = 'oren'): diri.__make = buat diri.__model = Model diri.__year = tahun diri.__mileage = jarak tempuh diri.__color = color def Move_forward (self, Speed): Cetak (" %s anda bergerak ke hadapan pada %s" %(diri.__model, kelajuan)) def move_backward (diri, kelajuan): cetak ("bergerak mundur pada % s" % kelajuan) musclecar (kereta): __hp = 300 def set_hp (self, hp): diri.__hp = hp def get_hp (diri): kembali diri.__hp def drag_race (diri, lawan): jika (diri.__hp> lawan.get_hp ()): kembali "anda menang!"Lain: Kembali" Anda kehilangan!"MyNewCar = Musclecar ('Ford', 'Mustang', '2016', 3000, 'Red') MyNewcar.set_hp (687) lawan = musclecar ('ford', 'Mustang', '2014', 6400, 'Green').set_hp (465) mynewcar.cetak move_forward ('25mph') (mynewcar.drag_race (lawan)) 

Perhatikan bahawa Musclecar objek dapat menggunakan pembina dan bergerak_forward kaedah dari kelas "kereta" walaupun kelas yang mereka instaniated dari tidak jelas memilikinya.

Mengatasi

Hanya kerana kelas mewarisi dari yang lain, anda tidak terjebak dengan semua fungsi kelas induk. Anda boleh menulis ganti bahagian kelas induk dalam kelas kanak -kanak. Perubahan yang digunakan untuk kelas kanak -kanak tidak akan digunakan untuk kelas induk asal, jadi anda tidak perlu bimbang tentang mengacaukan kelas lain.

Dalam contoh di atas, "musclecar" hanya mempunyai pemboleh ubah, __hp hanya terapung di sana tanpa cara untuk menetapkannya pada instantiasi. Lihat contoh yang sama, tetapi dengan pembina ditimpa.

kereta kelas (objek): def __init __ (diri, membuat = 'ford', model = 'pinto', tahun = '1971', jarak tempuh = 253812, warna = 'oren'): diri.__make = buat diri.__model = Model diri.__year = tahun diri.__mileage = jarak tempuh diri.__color = color def Move_forward (self, Speed): Cetak (" %s anda bergerak ke hadapan pada %s" %(diri.__model, kelajuan)) def move_backward (diri, kelajuan): cetak ("bergerak mundur pada % s" % kelajuan) musclecar (kereta): def __init __ (self, make = 'ford', model = 'Mustang', tahun = '1965', jarak tempuh = 54032, warna = 'biru', hp = 325): diri.__make = buat diri.__model = Model diri.__year = tahun diri.__mileage = jarak tempuh diri.__color = warna diri.__hp = hp def set_hp (diri, hp): diri.__hp = hp def get_hp (diri): kembali diri.__hp def drag_race (diri, lawan): jika (diri.__hp> lawan.get_hp ()): kembali "anda menang!"Lain: Kembali" Anda kehilangan!"MyNewCar = musclecar ('ford', 'Mustang', '2016', 3000, 'merah', 687) lawan = musclecar () mynewcar.cetak move_forward ('25mph') (mynewcar.drag_race (lawan)) 

Terdapat dua perkara yang perlu diperhatikan. Pertama, __hp telah menjadi diri.__hp dan dimasukkan ke dalam pembina. Kerana ini, penetapannya lebih mudah. Kedua, nilai lalai untuk "musclecar" baru telah diubah. Pinto bukan kereta otot lalai yang sangat baik, adakah ia?

Anda boleh melakukan ini dengan pembolehubah atau kaedah dalam kelas subclass atau kanak -kanak. Ia menambah tahap fleksibiliti tambahan dan menghalang anda daripada dikunci ke dalam fungsi ibu bapa atau kelas super.

Kaedah Super

Kadang -kadang, anda perlu mengakses kaedah yang terdapat di kelas induk dari dalam kelas kanak -kanak. Ambil contoh sebelumnya yang mengatasi pembina itu. Banyak kod itu berlebihan. Menggunakan Super () untuk memanggil pembina dari kelas "kereta" menghapuskan redundansi itu dan membuat kelas yang lebih isien.

Super () juga boleh digunakan untuk mengakses kaedah biasa untuk digunakan dalam kaedah subclass. Contoh di bawah digunakan Super () kedua -dua cara.

kereta kelas (objek): def __init __ (diri, membuat = 'ford', model = 'pinto', tahun = '1971', jarak tempuh = 253812, warna = 'oren'): diri.__make = buat diri.__model = Model diri.__year = tahun diri.__mileage = jarak tempuh diri.__color = warna def set_make (diri, buat): diri.__make = buat def get_make (diri): kembali diri.__Make def set_model (diri, model): diri.__model = model def get_model (diri): kembali diri.__Model def set_year (diri, tahun): diri.__Year = tahun def get_year (diri): kembali diri.__year def set_mileage (diri, jarak jauh): diri.__mileage = jarak jauh def get_mileage (diri): kembali diri.__mileage def set_color (diri, warna): diri.__color = warna def get_color (diri): kembali diri.__color def move_forward (diri, kelajuan): cetak (" %s anda bergerak ke hadapan pada %s" %(diri.__model, kelajuan)) def move_backward (diri, kelajuan): cetak ("bergerak mundur pada % s" % kelajuan) musclecar (kereta): def __init __ (self, make = 'ford', model = 'Mustang', tahun = '1965', jarak tempuh = 54032, warna = 'biru', HP = 325): Super ().__init __ (membuat, model, tahun, perbatuan, warna) diri.__hp = hp def set_hp (diri, hp): diri.__hp = hp def get_hp (diri): kembali diri.__hp def drag_race (diri, lawan): jika (diri.__hp> lawan.get_hp ()): kembali "anda menang!"Lain: Kembali" Anda kehilangan!"def trade_up (diri, tahun, warna): super ().set_year (tahun) super ().set_color (warna) super ().set_mileage (0) myNewCar = musclecar ('ford', 'Mustang', '2016', 3000, 'merah', 687) lawan = musclecar () myNewcar.cetak move_forward ('25mph') (mynewcar.drag_race (lawan)) mynewcar.cetak trade_up ('2017', 'hitam') ("Kereta otot baru saya adalah %s dan mempunyai %d batu" %(mynewcar.get_year (), mynewcar.get_color (), mynewcar.get_mileage ())) 

Lihatlah cara trade_up kaedah menggunakan penggunaan Super () untuk mengakses dan memanggil kaedah setter dari kelas induk.

Pemikiran penutupan

Warisan membolehkan anda menggunakan kelas sebagai templat untuk kelas yang lebih khusus. Anda boleh membina kelas dalam struktur sedemikian sehingga mula menyerupai pokok keluarga, dengan ahli "lebih tua" dan lebih umum yang menyampaikan ciri -ciri kepada ahli "lebih muda" yang lebih khusus.

Kebanyakan pengaturcaraan berorientasikan objek mengurangkan jumlah kod yang ditulis dan menghalang sebanyak mungkin kod dari ditulis semula. Warisan memainkan peranan besar dalam menjadikannya mungkin.

Latihan

  1. Buat kelas asas yang mewarisi dari kelas "kereta".
  2. Segarkan kelas baru anda dan hubungi salah satu kaedah dari "Kereta."
  3. Buat kaedah baru di kelas anak anda.
  4. Hubungi kaedah baru anda.
  5. Gunakan Super () Untuk menambah pembolehubah kepada pembina kelas anak anda.
  6. Buat kaedah menggunakan Super () untuk mengakses kaedah kelas induk.
  7. Hubungi kaedah baru anda yang menggunakan Super ().

Tutorial Linux Berkaitan:

  • Perkara yang hendak dipasang di Ubuntu 20.04
  • Perkara yang perlu dilakukan setelah memasang ubuntu 20.04 Focal Fossa Linux
  • Perkara yang perlu dipasang di Ubuntu 22.04
  • Pengenalan kepada Automasi, Alat dan Teknik Linux
  • Ubuntu 20.04 Trik dan Perkara yang Anda Tidak Tahu
  • Ubuntu 20.04 Panduan
  • Perkara yang perlu dilakukan setelah memasang Ubuntu 22.04 Jur -ubur Jammy ..
  • Cara Dual Boot Kali Linux dan Windows 10
  • Cara Membina Aplikasi TKInter Menggunakan Objek Berorientasikan ..
  • Mint 20: Lebih baik daripada Ubuntu dan Microsoft Windows?