Bu darsda meros bo'yicha barcha bilimlarni birlashtiramiz: ota-bola klass ierarxiyasi, super(), metodlarni qayta yozish, va polimorfizm. Vazifa — hayvonlar tizimini to'liq meros yordamida quramiz.
class Hayvon:
def __init__(self, ism, yosh):
self.ism = ism
self.yosh = yosh
def malumot(self):
return f"Ism: {self.ism}, Yosh: {self.yosh}"
class It(Hayvon):
def __init__(self, ism, yosh, zot):
super().__init__(ism, yosh) # ota klass __init__ ni chaqiradi
self.zot = zot
def malumot(self):
asosiy = super().malumot() # ota klass malumot() ni chaqiradi
return f"{asosiy}, Zot: {self.zot}"
def tovush(self):
return "Vov-vov!"
class Mushuk(Hayvon):
def __init__(self, ism, yosh, rang):
super().__init__(ism, yosh)
self.rang = rang
def malumot(self):
asosiy = super().malumot()
return f"{asosiy}, Rang: {self.rang}"
def tovush(self):
return "Miyov!"
# Ikkala bola klass — bir xil interfeys
bobik = It("Bobik", 3, "Labrador")
print(bobik.malumot()) # Ism: Bobik, Yosh: 3, Zot: Labrador
print(bobik.tovush()) # Vov-vov!
mitti = Mushuk("Mitti", 2, "Oq")
print(mitti.malumot()) # Ism: Mitti, Yosh: 2, Rang: Oq
print(mitti.tovush()) # Miyov!Natija:
Ism: Bobik, Yosh: 3, Zot: Labrador
Vov-vov!
Ism: Mitti, Yosh: 2, Rang: Oq
Miyov!Ushbu kod qanday ishlaydi:
Hayvon — umumiy ism, yosh va malumot() ni saqlaydiIt va Mushuk super().__init__() orqali ota klassni ishga tushiradimalumot() ni qayta yozadi, lekin super().malumot() orqali ota klassning natijasini ham oladitovush() har bir bola klassda o'z javobi bilan yozilganPolimorfizm amalda — har xil turdagi obyektlar bir xil metodga o'z javobini beradi:
hayvonlar = [
It("Rex", 5, "Nemis choponi"),
Mushuk("Pushti", 1, "Qora"),
It("Bobik", 3, "Labrador"),
]
for hayvon in hayvonlar:
print(hayvon.malumot())
print(hayvon.tovush())
print("---")Muhim qoidalar:
super().__init__() — ota klass __init__ ni bola klassdan chaqiradisuper().metod() — ota klassning istalgan metodini chaqiradimalumot() ni kengaytiradiHayvonlar tizimi
Hayvon, It va Mushuk klasslarini meros bilan yarating:
Hayvon.__init__(self, ism, yosh) — ikkala atributni saqlangHayvon.malumot(self) — "Ism: {ism}, Yosh: {yosh}" qaytarsinIt(Hayvon): super().__init__() orqali, zot atributini qo'shing, malumot() ni "Ism: {ism}, Yosh: {yosh}, Zot: {zot}" formatida qayta yozing, tovush() "Vov-vov!" qaytarsinMushuk(Hayvon): super().__init__() orqali, rang atributini qo'shing, malumot() ni "Ism: {ism}, Yosh: {yosh}, Rang: {rang}" formatida qayta yozing, tovush() "Miyov!" qaytarsin