Assalomu alaykum, yosh dasturchilar! 😊
Bugun biz Inheritance (Meros) tushunchasini o'rganamiz
Inheritance bir sinfning (ota sinf) atributlari va metodlarini boshqa sinfga (bola sinf) meros qilib berish imkonini beradi.
class Hayvon: # Ota sinf
def __init__(self, turi):
self.turi = turi
def ovoz_chiqar(self):
return "Men hayvonman!"
class Mushuk(Hayvon): # Bola sinf
def ovoz_chiqar(self):
return "Miyov!"
mushuk = Mushuk("Mushuk")
print(mushuk.turi) # Mushuk
print(mushuk.ovoz_chiqar()) # Miyov!
Single Inheritance - bitta ota sinfdan meros olish:
class Transport: # Ota sinf
def __init__(self, nom, tezlik):
self.nom = nom
self.tezlik = tezlik
def harakatlanish(self):
return f"{self.nom} harakatlanmoqda"
class Mashina(Transport): # Bola sinf
def __init__(self, nom, tezlik, rang):
super().__init__(nom, tezlik) # Ota sinf konstruktorini chaqirish
self.rang = rang
def harakatlanish(self):
return f"{self.rang} {self.nom} yo'lda harakatlanmoqda"
class Samolyot(Transport): # Bola sinf
def __init__(self, nom, tezlik, balandlik):
super().__init__(nom, tezlik)
self.balandlik = balandlik
def harakatlanish(self):
return f"{self.nom} osmonda {self.balandlik}m balandlikda uchmoqda"
# Test qilish
mashina = Mashina("Toyota", 120, "Qizil")
samolyot = Samolyot("Boeing", 800, 10000)
print(mashina.harakatlanish())
print(samolyot.harakatlanish())
Multilevel Inheritance - sinflar zanjir shaklida meros olishi:
class Hayvon: # Ota sinf
def __init__(self, nom):
self.nom = nom
def ovoz_chiqar(self):
return "Men hayvonman!"
class Sut_emizuvchi(Hayvon): # Bola sinf
def __init__(self, nom, sut_emizuvchi):
super().__init__(nom)
self.sut_emizuvchi = sut_emizuvchi
def sut_berish(self):
return f"{self.nom} sut beradi"
class It(Sut_emizuvchi): # Nabira sinf
def __init__(self, nom, zot):
super().__init__(nom, True)
self.zot = zot
def ovoz_chiqar(self):
return f"{self.nom} havlayapti: Woof! Woof!"
# Test qilish
it = It("Rex", "Olmon cho'pon iti")
print(it.ovoz_chiqar()) # Rex havlayapti: Woof! Woof!
print(it.sut_berish()) # Rex sut beradi
print(f"Zot: {it.zot}") # Zot: Olmon cho'pon iti
Multiple Inheritance - bir nechta ota sinfdan meros olish:
class Qo_ng_iroq:
def qo_ng_iroq_qilish(self):
return "Qo'ng'iroq qilmoqda..."
class Xabar:
def xabar_yuborish(self):
return "Xabar yubormoqda..."
class Internet:
def internet_ochish(self):
return "Internet ochmoqda..."
class Smartfon(Qo_ng_iroq, Xabar, Internet): # Multiple inheritance
def __init__(self, nom):
self.nom = nom
def barcha_funksiyalar(self):
return f"{self.nom}: {self.qo_ng_iroq_qilish()} {self.xabar_yuborish()} {self.internet_ochish()}"
# Test qilish
telefon = Smartfon("iPhone")
print(telefon.barcha_funksiyalar())
# MRO (Method Resolution Order) ko'rish
print(Smartfon.__mro__)
super() funksiyasi ota sinfning metodlarini chaqirish uchun ishlatiladi:
class Shaxs:
def __init__(self, ism, yosh):
self.ism = ism
self.yosh = yosh
def ma_lumot(self):
return f"Ism: {self.ism}, Yosh: {self.yosh}"
class Talaba(Shaxs):
def __init__(self, ism, yosh, kurs):
super().__init__(ism, yosh) # Ota sinf konstruktorini chaqirish
self.kurs = kurs
def ma_lumot(self):
# Ota sinf metodini chaqirish va qo'shimcha ma'lumot qo'shish
ota_ma_lumot = super().ma_lumot()
return f"{ota_ma_lumot}, Kurs: {self.kurs}"
class O_quvchi(Talaba):
def __init__(self, ism, yosh, kurs, sinf):
super().__init__(ism, yosh, kurs)
self.sinf = sinf
def ma_lumot(self):
ota_ma_lumot = super().ma_lumot()
return f"{ota_ma_lumot}, Sinf: {self.sinf}"
# Test qilish
o_quvchi = O_quvchi("Ali", 18, 1, "10-A")
print(o_quvchi.ma_lumot())
Vazifa: Hayvonlar tizimi yarating
Hayvon sinfi - nomi, yoshiSut_emizuvchi sinfi - Hayvon'dan meros oladiIt sinfi - Sut_emizuvchi'dan meros oladiVaqt: 10 daqiqa ⏰
Vazifa: Transport tizimi yarating
Transport sinfi - nomi, tezligiQuruqlik_transport sinfi - Transport'dan meros oladiMashina va Velosiped sinflari - Quruqlik_transport'dan meros oladiVaqt: 10 daqiqa ⏰
Xodim sinfi - ismi, maoshiMenejer sinfi - Xodim'dan meros oladiDasturchi sinfi - Xodim'dan meros oladiKitob sinfi - nomi, muallifiDarslik sinfi - Kitob'dan meros oladiRoman sinfi - Kitob'dan meros oladiBino sinfi - qavati, maydoniUy va Ofis sinflari - Bino'dan meros oladiBitta ota sinfdan meros olish
Sinflar zanjir shaklida meros olishi
Bir nechta ota sinfdan meros olish
Ota sinf metodlarini chaqirish
Keyingi dars: Polymorphism mavzusini o'rganamiz
Savollaringiz bo'lsa, yozib qoldiring! 😊
💡 Muhim eslatma:
Inheritance yordamida kodni qayta ishlatish va tartibga solish mumkin. Har bir sinf o'z vazifasini bajarishi kerak!