โฌ…๏ธ Bosh sahifaga
1 / 15

๐Ÿ“š Python OOP - 3-dars

Inheritance (Meros)

Asosiy tushunchalar va ishlatilishi

Assalomu alaykum, yosh dasturchilar! ๐Ÿ˜Š
Bugun biz OOP'ning eng muhim prinsiplaridan biri - Inheritance'ni o'rganamiz

120 daqiqa

๐Ÿ“‹ Dars rejasi

๐Ÿค” Inheritance nima?

Inheritance - bu bir class'dan boshqa class yaratish. Real hayot misoli:

๐Ÿ’ก Real hayotdan misol:

Agar sizda "Transport" class bo'lsa, undan "Mashina", "Velosiped", "Samolyot" kabi boshqa class'lar yaratishingiz mumkin. Barcha transport vositalarida umumiy xususiyatlar bor: tezlik, yoqilg'i, harakatlanish kabi.

# Parent class (Ota class)
class Transport:
    def __init__(self, nom, tezlik=0):
        self.nom = nom
        self.tezlik = tezlik
        self.yoniq = False
    
    def yoqish(self):
        self.yoniq = True
        print(f"{self.nom} yoqildi!")
    
    def o_chirish(self):
        self.yoniq = False
        self.tezlik = 0
        print(f"{self.nom} o'chirildi!")

๐Ÿ‘ถ Child class misoli

# Child class (Farzand class)
class Mashina(Transport):  # Transport'dan meros oladi
    def __init__(self, nom, rang, model):
        super().__init__(nom)  # Parent class constructor'ini chaqiramiz
        self.rang = rang
        self.model = model
        self.dverlar = 4
    
    def klaxon(self):
        print(f"{self.nom} klaxon chalmoqda: BEEP BEEP!")

# Test qilish
mashina1 = Mashina("Toyota", "Qizil", "Camry")
mashina1.yoqish()  # Parent class metodini ishlatamiz
mashina1.klaxon()  # O'z metodini ishlatamiz

โœ… Inheritance'ning afzalliklari:

  • Kod qayta ishlatish - bir marta yozilgan kodni ko'p marta ishlatish
  • Kodni qisqartirish - takroriy kodlarni kamaytirish
  • Tartibli tuzilish - mantiqiy class'lar tuzilishi
  • Oson saqlash - o'zgarishlar faqat bir joyda

๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ Parent va Child class

Parent class (Ota class)

class Hayvon:
    def __init__(self, nom, yosh):
        self.nom = nom
        self.yosh = yosh
        self.jon = 100
        self.och = True
    
    def ovqatlanish(self):
        if self.och:
            self.och = False
            self.jon += 20
            print(f"{self.nom} ovqatlandi!")
    
    def uxlash(self):
        self.jon += 10
        print(f"{self.nom} uxlayapti...")

Child class (Farzand class)

class It(Hayvon):
    def __init__(self, nom, yosh, zot):
        super().__init__(nom, yosh)
        self.zot = zot
        self.uy_quvvat = True
    
    def havlayish(self):
        print(f"{self.nom} havlayapti: Woof! Woof!")
    
    def uy_quvvatlash(self):
        if self.uy_quvvat:
            print(f"{self.nom} uyni quvvatlayapti!")

๐Ÿ”„ Method Overriding

Method Overriding - child class'da parent class'ning metodini qayta yozish.

class Transport:
    def harakatlanish(self):
        print(f"{self.nom} harakatlanmoqda...")

class Mashina(Transport):
    def harakatlanish(self):  # Method Overriding
        print(f"{self.rang} {self.nom} yo'lda harakatlanmoqda!")
        print("Dvigatel ishlamoqda: Vroom! Vroom!")

class Samolyot(Transport):
    def harakatlanish(self):  # Method Overriding
        print(f"{self.model} {self.nom} osmonda uchmoqda!")
        print("Dvigatel ishlamoqda: Whoosh! Whoosh!")

# Test qilish
mashina1 = Mashina("Toyota", "Qizil", "Camry")
samolyot1 = Samolyot("Boeing", "747")

mashina1.harakatlanish()  # Override qilingan metod
samolyot1.harakatlanish()  # Override qilingan metod

๐Ÿ”ง super() funksiyasi

super() - parent class'ga murojaat qilish uchun ishlatiladi.

class Ota:
    def __init__(self, ism, yosh):
        self.ism = ism
        self.yosh = yosh
        print(f"Ota yaratildi: {self.ism}")
    
    def ish(self):
        print(f"{self.ism} ishlayapti...")

class Farzand(Ota):
    def __init__(self, ism, yosh, maktab):
        super().__init__(ism, yosh)  # Ota class constructor'ini chaqiramiz
        self.maktab = maktab
        print(f"Farzand yaratildi: {self.ism}")
    
    def ish(self):  # Method Overriding
        print(f"{self.ism} uy vazifasini qilayapti...")
        super().ish()  # Ota class metodini ham chaqiramiz

# Test qilish
farzand1 = Farzand("Ali", 15, "15-maktab")
farzand1.ish()  # Override qilingan metod + super()

๐Ÿ”— Multiple Inheritance

Multiple Inheritance - bir class bir nechta parent class'lardan meros olishi.

class Hayvon:
    def __init__(self, nom):
        self.nom = nom
        self.jon = 100
    
    def nafas_olish(self):
        print(f"{self.nom} nafas olayapti...")

class Uchuvchi:
    def __init__(self):
        self.uchish_qobiliyati = True
    
    def uchish(self):
        print("Uchmoqda...")

class Suzuvchi:
    def __init__(self):
        self.suzish_qobiliyati = True
    
    def suzish(self):
        print("Suzmoqda...")

# Multiple Inheritance
class Qush(Hayvon, Uchuvchi):
    def __init__(self, nom, tur):
        Hayvon.__init__(self, nom)  # Birinchi parent
        Uchuvchi.__init__(self)  # Ikkinchi parent
        self.tur = tur

๐Ÿพ Amaliy loyiha: Hayvonlar class

class Hayvon:
    def __init__(self, nom, yosh):
        self.nom = nom
        self.yosh = yosh
        self.jon = 100
        self.och = True
        self.uyqu = False
    
    def ovqatlanish(self):
        if self.och:
            self.och = False
            self.jon += 20
            print(f"{self.nom} ovqatlandi! Jon: {self.jon}")
    
    def uxlash(self):
        self.uyqu = True
        self.jon += 10
        print(f"{self.nom} uxlayapti... Jon: {self.jon}")
    
    @abstractmethod
    def ovoz_chiqarish(self):
        pass
    
    @abstractmethod
    def harakatlanish(self):
        pass

๐Ÿ• Hayvonlar child class'lari

class It(Hayvon):
    def __init__(self, nom, yosh, zot):
        super().__init__(nom, yosh)
        self.zot = zot
        self.uy_quvvat = True
    
    def ovoz_chiqarish(self):
        print(f"{self.nom} havlayapti: Woof! Woof!")
    
    def harakatlanish(self):
        print(f"{self.nom} yugurmoqda...")
    
    def uy_quvvatlash(self):
        if self.uy_quvvat:
            print(f"{self.nom} uyni quvvatlayapti!")
            self.jon -= 5

class Mushuk(Hayvon):
    def __init__(self, nom, yosh, rang):
        super().__init__(nom, yosh)
        self.rang = rang
        self.miyovlash = True
    
    def ovoz_chiqarish(self):
        print(f"{self.nom} miyovlayapti: Meow! Meow!")
    
    def harakatlanish(self):
        print(f"{self.nom} sakramoqda...")
    
    def sichqon_tutish(self):
        print(f"{self.nom} sichqon tutmoqda...")
        self.jon -= 3

๐Ÿงช Test qilish

# Test qilish
print("=== Hayvonlar olami ===")

it1 = It("Rex", 3, "Olmon")
mushuk1 = Mushuk("Mimi", 2, "Oq")
qush1 = Qush("Qarg'a", 1, "Qora")

print("\n=== It ===")
it1.ovoz_chiqarish()
it1.harakatlanish()
it1.ovqatlanish()
it1.uy_quvvatlash()

print("\n=== Mushuk ===")
mushuk1.ovoz_chiqarish()
mushuk1.harakatlanish()
mushuk1.ovqatlanish()
mushuk1.sichqon_tutish()

print("\n=== Qush ===")
qush1.ovoz_chiqarish()
qush1.harakatlanish()
qush1.ovqatlanish()

๐ŸŽฏ Mashq 1: Transport tizimi

๐Ÿš— Vazifa:
  • Transport parent class yarating
  • Undan Mashina, Samolyot, Kema child class'lar yarating
  • Har birida o'ziga xos xususiyatlar qo'shing
  • harakatlanish metodini override qiling
  • super() dan foydalaning

Vaqt: 10 daqiqa โฐ

๐ŸŽฏ Mashq 2: O'yinchi tizimi

๐ŸŽฎ Vazifa:
  • O'yinchi parent class yarating
  • Undan Jangchi, Sehrgar, Kamandir child class'lar yarating
  • Har birida o'ziga xos xususiyatlar qo'shing
  • hujum metodini override qiling
  • super() dan foydalaning

Vaqt: 10 daqiqa โฐ

๐Ÿ  Uyga vazifa

๐Ÿš— Vazifa 1: Transport tizimi
  • Transport parent class yarating
  • Xususiyatlar: nom, tezlik, yoqilg'i
  • Metodlar: yoqish(), o'chirish(), harakatlanish()
  • Child class'lar: Mashina, Samolyot, Kema
๐ŸŽฎ Vazifa 2: O'yinchi tizimi
  • O'yinchi parent class yarating
  • Child class'lar: Jangchi, Sehrgar, Kamandir
  • Har birida o'ziga xos xususiyatlar
  • Method Overriding va super() ishlatish

๐ŸŽ‰ Xulosa

Bugun nimalarni o'rgandik?

๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ Inheritance

Bir class'dan boshqa class yaratish

๐Ÿ”„ Method Overriding

Child class'da parent metodini qayta yozish

๐Ÿ”ง super() funksiyasi

Parent class'ga murojaat qilish

๐Ÿ”— Multiple Inheritance

Bir nechta parent class'lardan meros olish

Keyingi dars: Polymorphism (Ko'p shakllilik) mavzusini o'rganamiz

Savollaringiz bo'lsa, yozib qoldiring! ๐Ÿ˜Š