Polimorfisme Python

Polimorfisme Python

Pengenalan

Polimorfisme adalah satu lagi aspek penting dalam pengaturcaraan berorientasikan objek. Tiada peminat Warcraft, ia tidak ada kaitan dengan menjadikan orang menjadi domba. Itu akan menjadi lebih sejuk. Sebaliknya, polimorfisme membolehkan kaedah dan fungsi menggunakan kelas dengan fungsi yang sama dengan cara yang sama.

Polimorfisme mengurangkan jumlah kod yang perlu anda tulis dengan menghapuskan redundansi dengan cara yang logik dan bermakna. Ia bergantung kepada anda, pengaturcara, pandai dalam reka bentuk dan memanfaatkan persamaan dalam objek.

Apakah polimorfisme?

Polimorfisme adalah salah satu perkara yang sukar untuk ditentukan dalam satu perkataan atau frasa. Istilah ini mengambil bentuk yang sedikit berbeza dalam bahasa pengaturcaraan yang berbeza, menjadikannya lebih sukar untuk diturunkan dengan ringkas. Secara umumnya, dan di Python, itu adalah keupayaan pelbagai objek yang berbeza yang diperoleh dari kelas yang berbeza untuk digunakan dengan cara yang sama.

Untuk menggunakan contoh kereta yang telah dilakukan oleh panduan ini, bayangkan anda perlu menulis fungsi yang memanggilnya bergerak_forward kaedah pada mana -mana jenis kereta yang diluluskan. Setiap objek yang dibuat dari kelas "kereta" asal atau mana -mana subkelas yang memanjangkannya harus mempunyai bergerak_forward kaedah, walaupun ia telah ditimpa untuk melakukan sesuatu yang sedikit berbeza di beberapa subkelas. Ini bermaksud bahawa melalui polimorfisme, anda boleh menulis satu fungsi yang mengambil objek "kereta" dan panggilan bergerak_forward. Oleh kerana semua objek yang diterapkan dari subkelas "kereta" masih secara teknikal "kereta" objek dan mempunyai semua sifat asalnya dalam beberapa bentuk atau yang lain, ini akan berfungsi.

Sila ambil perhatian bahawa spesifikasi satu superclass tunggal untuk digunakan sebagai jenis objek tidak sepenuhnya diperlukan dalam python. Python tidak ditaip dengan kuat, jadi anda tidak perlu menentukan secara jelas jenis pembolehubah yang diperlukan oleh kaedah atau fungsi. Dalam bahasa seperti Java, ini memainkan peranan dalam bagaimana polimorfisme berkelakuan. Walau bagaimanapun, di Python, adalah idea yang baik untuk memikirkannya di sepanjang garis ini untuk memastikan objek yang anda lalui akan semua mempunyai kaedah atau harta yang digunakan.

Menggunakannya di Python

Sekarang, ini benar -benar akan membantu melihat semua ini dalam tindakan. Ia tidak begitu rumit kerana anda mungkin berfikir sekarang. Pertama, pastikan anda disediakan dengan kelas contoh. Sekiranya anda belum memilikinya, mereka betul -betul 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 = 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) 

Dengan kelas demo ditubuhkan, anda boleh menguji fungsi cepat yang menggunakan polimorfisme untuk memanggil bergerak_forward.

newMusclecar = musclecar () newCar = car () def go_25 (car_object): car_object.MOVE_FORWARD ("25mph") Go_25 (newCar) Go_25 (newMusclecar) 

Kedua -dua fungsi panggilan berkelakuan sama persis, walaupun mereka diluluskan objek yang berbeza yang dicipta dari kelas yang berbeza. Terima kasih kepada polimorfisme, anda tidak perlu menulis dua fungsi yang berbeza dan boleh menggunakan sifat serupa objek untuk menulis hanya satu fungsi.

Cuba mengatasi salah satu bergerak_forward kaedah dalam kelas "musclecar". Jalankan fungsi itu lagi, dan lihat apa yang berlaku.

 Kelas Musclecar (CAR): ... def Move_Forward (Self, Speed): Cetak (" %Awesome anda sedang mengaum jalan di %s" %(diri.__model, kelajuan)) .. 

Apabila fungsi memanggil bergerak_forward kaedah pada objek kereta otot, ia masih berfungsi dengan sempurna, dan versi yang ditindas kaedah digunakan.

Pemikiran penutupan

Polimorfisme terdengar seperti itu akan menjadi konsep yang sangat rumit, tetapi namanya agak salah. Konsep itu sendiri bukanlah semua yang menakutkan, dan ia juga membantu memudahkan struktur keseluruhan kod anda.

Tema yang sama dalam pengaturcaraan berorientasikan objek adalah penghapusan redundansi melalui kod yang boleh diguna semula dan boleh disesuaikan. Polimorfisme adalah bahagian penting dalam gambar itu.

Latihan

  1. Gunakan kelas contoh untuk menelefon objek "kereta" dan objek "musclecar".
  2. Buat fungsi yang boleh berinteraksi dengan jenis objek "kereta".
  3. Hubungi fungsi anda dua kali, lulus kedua -dua objek.
  4. Mengatasi salah satu kaedah dalam kelas musclecar. Pastikan tidak mengubah parameter yang diterima secara drastik.
  5. Hubungi fungsi anda lagi.
  6. Buat kelas baru yang mewarisi dari kelas "kereta".
  7. Segarkan objek baru dari kelas yang baru dibuat. Lulus objek ke fungsi anda.

Tutorial Linux Berkaitan:

  • Pengenalan kepada Automasi, Alat dan Teknik Linux
  • Perkara yang hendak dipasang di Ubuntu 20.04
  • Cara Membina Aplikasi TKInter Menggunakan Objek Berorientasikan ..
  • Cara Menulis Sambungan Nautilus dengan Nautilus-Python
  • Perkara yang perlu dilakukan setelah memasang ubuntu 20.04 Focal Fossa Linux
  • Mengkonfigurasi ZFS di Ubuntu 20.04
  • Menguasai Gelung Skrip Bash
  • Cara Bekerja Dengan API Rest WooCommerce dengan Python
  • Mint 20: Lebih baik daripada Ubuntu dan Microsoft Windows?
  • EEPROM CH341A Programmer - Baca dan tulis data ke cip…