Python inheritance (Vorislik)

Boshqa har qanday OOP tillari singari, Python ham klass inheritance tushunchasini qo’llab-quvvatlaydi.

Inheritance bizga mavjud klassdan yangi klass yaratish imkonini beradi.

Yaratilgan yangi klass quyi klass (bola yoki hosila klass) deb nomlanadi va bolalar klassi olingan mavjud klass superklass (ota yoki asosiy klass) deb nomlanadi.

Python Inheritance sintaksisi:

Mana Pythondagi Inheritancening sintaksisi,

Bu erda biz sub_class klassini super_class klassidan meros qilib olamiz.

1-misol. Python Inheritance:

Natija:

Yuqoridagi misolda biz “Animal” super klassidan “Dog” bola klassini oldik. Statementlarga e’tibor bering,

Bu yerda biz Animal klassining nomi va eat() ga kirish uchun labrador (It ob’ekti) dan foydalanamiz. Bu mumkin, chunki quyi klass yuqori klassning barcha atributlari va metodlarini meros qilib oladi.

Bundan tashqari, biz selfdan foydalanib Dog klassining metodi ichidagi name atributiga kirdik.

Pythonda meros – bu munosabatdir. Ya’ni, biz merosdan faqat ikkita klass o’rtasida o’zaro bog’liqlik mavjud bo’lganda foydalanamiz. Masalan,

Avtomobil – bu transport vositasi
Olma – bu meva
Mushuk – Hayvon
Bu yerda, Avtomobil Avtomobildan, Apple Fruitdan meros bo’lishi mumkin va hokazo.

2-misol. Pythonda inheritance:

Keling, Pythondagi merosning yana bir misolini ko’rib chiqaylik,

Ko’pburchak – bu 3 yoki undan ortiq tomonlari bo’lgan yopiq figura. Aytaylik, bizda ko’pburchak deb nomlangan klass mavjud bo’lib, u quyidagicha aniqlanadi:

Bu klassda n tomonlar sonini va har bir tomonning kattaligini sides deb ataladigan ro’yxat sifatida saqlash uchun ma’lumotlar atributlari mavjud.

  • inputSides() metodi har bir tomonning kattaligini oladi
  • dispSides() metodi bu yon uzunliklarni ko’rsatadi

Uchburchak – bu 3 tomoni bo’lgan ko’pburchak. Shunday qilib, biz Polygondan meros bo’lgan Triangle nomli klassni yaratishimiz mumkin. Bu Polygon klassining barcha atributlarini Triangle klassi uchun mavjud qiladi.

Biz ularni yana qaytadan yaratishimiz shart emas (kodni qayta ishlatish imkoniyati mavjud). Uchburchakni quyidagicha yaratilishi mumkin.

Biroq, Triangle klassida uchburchak maydonini topish va chop etish uchun findArea() nomli yangi metodi mavjud.

Keling, yuqoridagi misolning to’liq kodini ko’rib chiqaylik, shu jumladan ob’ekt yaratishni ham,

Natija:

Bu yerda biz Triangle klassi uchun inputSides() yoki dispSides() kabi metodlarni alohida belgilamagan bo’lsak ham, ulardan foydalana olganimizni ko’rishimiz mumkin.

Agar atribut klassning o’zida topilmasa, qidiruv asosiy klassga davom etadi. Agar asosiy klassning o’zi boshqa klasslardan olingan bo’lsa, bu rekursiv takrorlanadi.

Python inheritanceda metodni qayta yozish:

Oldingi misolda biz quyi klass ob’ekti superklass metodiga kirishi mumkinligini ko’rib o’tdik.

Ammo, agar bir xil usul superklassda ham, bola klassda ham mavjud bo’lsa-chi?

Bunday holda, bola klassdagi metod yuqori klassdagi metodni bekor qiladi. Ushbu konsepsiya Pythonda method overriding (metodni qayta yozish) deb nomlanadi.

Method overriding:

Natija:

Yuqoridagi misolda bir xil eat() usuli Dog klassida ham, Animal klassida ham mavjud.

Endi Dog kichik klassi ob’ekti yordamida eat() metodini chaqirganimizda, Dog klassining metodi chaqiriladi.

Buning sababi, Dog kichik klassining eat() metodi Animal superklassining bir xil nomdagi metodini bekor qiladi.

Python inheritanceda Super() metodi:

Ilgari biz quyi klassdagi bir xil metod superklassdagi metodni bekor qilishini ko’rdik.

Biroq, agar biz quyi klassdan superklass metodiga kirishimiz kerak bo’lsa, biz super() metodidan foydalanamiz. Masalan,

Natija:

Yuqoridagi misolda Dog kichik klassining eat() metodi Animal superklassining bir xil metodini bekor qiladi.

Dog kichik klassidan Animal superklassining eat() metodini chaqirish uchun biz quyidagi super() metodidan foydalanganmiz.

Shunday qilib, biz labrador ob’ekti yordamida eat() usulini chaqirganimizda eat() usulining qayta yozilgan varianti bilan birga superklassdagi varianti ham bajariladi.

Inheritance (Meros)dan foydalanish:

  1. Bola klass ota klassining barcha funksiyalarini meros qilib olishi mumkinligi sababli, bu kodni qayta ishlatish imkonini beradi.
  2. Funksionallik ishlab chiqilgandan so’ng, uni oddiygina meros qilib olishingiz mumkin. G’ildirakni qayta ixtiro qilishning hojati yo’q. Bu toza kodni va uni saqlashni osonlashtiradi.
  3. Siz Bola klassga o’zingizning funksiyalaringizni ham qo’shishingiz mumkinligi sababli, siz faqat foydali funksiyalarni meros qilib olishingiz va boshqa kerakli xususiyatlarni belgilashingiz mumkin.
Yuqoriga