Python'da meros (inheritance)

Klass va obyekt darsida bir klass yozdik. Ammo ko’p klasslar bir-biriga o’xshaydi: “o’quvchi” ham, “o’qituvchi” ham — avvalo “odam”. Bir xil kodni ikki marta yozmaslik uchun meros (inheritance) bor: bir klass boshqasidan barcha xususiyatini tayyor holda oladi.

Muammo: takrorlanadigan kod

Oquvchi va Oqituvchi klasslarida ism, yosh va salomlash bir xil bo’ladi. Ularni ikki joyda takrorlash — funksiyalardagi kabi — yomon amaliyot. Umumiy qismni bir joyga chiqarish kerak.

Ota va bola klass

Umumiy narsalarni ota klassga yozamiz, keyin bola klass undan meros oladi. Bola klass qavs ichida ota klass nomini yozadi:

Python

Oquvchi ichida hech narsa yozmadik (pass), lekin u Odam dan __init__ va salomlash ni meros oldi. Shuning uchun aziz.salomlash() ishlaydi.

Bola klassga o’ziga xoslik qo’shish

Bola klass ota’dan olganini saqlab, ustiga o’ziniki ni qo’shadi. Buning uchun super() — ota klassga murojaat — ishlatiladi:

Python

super().__init__(ism, yosh) ota klassning __init__ ini chaqirib, ism va yosh ni o’sha yerda saqlaydi — biz uni qayta yozmaymiz.

Metodni qayta yozish (override)

Bola klass ota’dan olgan metodni o’zgacha qilib qayta yozishi mumkin — buni override deyiladi:

Python

Oqituvchi salomlash ni o’ziga moslab qayta yozdi. Ota’dagi versiya emas, bola’dagi ishlaydi.

Amaliy mashq

Klasslar oilasini quring:

  1. Hayvon klassini yarating — nom atributi va ovoz() metodi bo’lsin;
  2. It va Mushuk klasslarini undan meros qilib oling;
  3. har birida ovoz() metodini qayta yozing (override);
  4. It klassiga faqat unga xos qoriqlash() metodini qo’shing;
  5. uchala klassdan obyekt yasab, ovoz() ni chaqiring.

Mushuk obyektida qoriqlash() ni chaqirib ko’ring — nima bo’ladi?

Qisqacha xulosa

  • Meros — bir klass boshqasidan barcha atribut/metodni tayyor holda oladi.
  • class Bola(Ota): — bola ota klassdan meros oladi (“bir turi”).
  • super().__init__(...) — ota klassning __init__ ini chaqiradi (qayta yozmaslik uchun).
  • Bola o’ziga xos atribut/metod qo’shishi mumkin.
  • Override — bola ota’dan olgan metodni o’zgacha qayta yozishi.

Keyingi darsda list comprehension — ro’yxatni bitta qatorda ixcham yaratishni ko’ramiz.

Bu dars foydali bo'ldimi?

marta ko'rildi