Assalomu alaykum, yosh dasturchilar! ๐
Bugun biz OOP'ning eng muhim prinsiplaridan biri - Inheritance'ni o'rganamiz
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 (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:
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...")
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 - 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() - 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 - 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
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
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
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()
Vaqt: 10 daqiqa โฐ
Vaqt: 10 daqiqa โฐ
Bir class'dan boshqa class yaratish
Child class'da parent metodini qayta yozish
Parent class'ga murojaat qilish
Bir nechta parent class'lardan meros olish
Keyingi dars: Polymorphism (Ko'p shakllilik) mavzusini o'rganamiz
Savollaringiz bo'lsa, yozib qoldiring! ๐