⬅️ Bosh sahifaga
1 / 12

📚 Python OOP - 12-dars

Inheritance (Meros)

Single, Multiple, Multilevel inheritance

Assalomu alaykum, yosh dasturchilar! 😊
Bugun biz Inheritance (Meros) tushunchasini o'rganamiz

120 daqiqa

📋 Dars rejasi

🤔 Inheritance nima?

Inheritance bir sinfning (ota sinf) atributlari va metodlarini boshqa sinfga (bola sinf) meros qilib berish imkonini beradi.

🔗 Inheritance turlari:

  • Single Inheritance - Bitta ota sinfdan meros olish
  • Multiple Inheritance - Bir nechta ota sinfdan meros olish
  • Multilevel Inheritance - Sinflar zanjir shaklida meros olishi
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

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

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

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

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())

💪 Amaliy mashq 1

🐾 Hayvonlar tizimi

Vazifa: Hayvonlar tizimi yarating

  • Hayvon sinfi - nomi, yoshi
  • Sut_emizuvchi sinfi - Hayvon'dan meros oladi
  • It sinfi - Sut_emizuvchi'dan meros oladi
  • Har bir sinfda o'ziga xos metodlar

Vaqt: 10 daqiqa

💪 Amaliy mashq 2

🚗 Transport tizimi

Vazifa: Transport tizimi yarating

  • Transport sinfi - nomi, tezligi
  • Quruqlik_transport sinfi - Transport'dan meros oladi
  • Mashina va Velosiped sinflari - Quruqlik_transport'dan meros oladi
  • Multiple inheritance ishlatish

Vaqt: 10 daqiqa

🏠 Uy vazifasi

👨‍💼 Vazifa 1: Xodimlar tizimi
  • Xodim sinfi - ismi, maoshi
  • Menejer sinfi - Xodim'dan meros oladi
  • Dasturchi sinfi - Xodim'dan meros oladi
  • Har bir sinfda o'ziga xos metodlar
📚 Vazifa 2: Kitoblar tizimi
  • Kitob sinfi - nomi, muallifi
  • Darslik sinfi - Kitob'dan meros oladi
  • Roman sinfi - Kitob'dan meros oladi
  • Multilevel inheritance ishlatish
🏠 Vazifa 3: Uy-joy tizimi
  • Bino sinfi - qavati, maydoni
  • Uy va Ofis sinflari - Bino'dan meros oladi
  • Multiple inheritance ishlatish

🎉 Xulosa

Bugun nimalarni o'rgandik?

🔗 Single Inheritance

Bitta ota sinfdan meros olish

🔗 Multilevel Inheritance

Sinflar zanjir shaklida meros olishi

🔗 Multiple Inheritance

Bir nechta ota sinfdan meros olish

🔧 super() funksiyasi

Ota sinf metodlarini chaqirish

Keyingi dars: Polymorphism mavzusini o'rganamiz

Savollaringiz bo'lsa, yozib qoldiring! 😊

🔄 Qayta ko'rib chiqish

Savollar:

  • Inheritance nima?
  • Single va Multiple inheritance o'rtasidagi farq nima?
  • super() funksiyasi nima uchun kerak?
  • MRO nima?

💡 Muhim eslatma:

Inheritance yordamida kodni qayta ishlatish va tartibga solish mumkin. Har bir sinf o'z vazifasini bajarishi kerak!