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:
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:
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:
Oqituvchi salomlash ni o’ziga moslab qayta yozdi. Ota’dagi versiya emas,
bola’dagi ishlaydi.
Amaliy mashq
Klasslar oilasini quring:
Hayvonklassini yarating —nomatributi vaovoz()metodi bo’lsin;ItvaMushukklasslarini undan meros qilib oling;- har birida
ovoz()metodini qayta yozing (override); Itklassiga faqat unga xosqoriqlash()metodini qo’shing;- 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.