Assalomu alaykum, yosh dasturchilar! 😊
Bugun biz Polymorphism tushunchasini o'rganamiz
Polymorphism so'zi "poly" (ko'p) va "morph" (shakl) so'zlaridan kelib chiqqan bo'lib, "ko'p shakllilik" ma'nosini beradi.
class Hayvon:
def ovoz_chiqar(self):
return "Men hayvonman!"
class Mushuk(Hayvon):
def ovoz_chiqar(self): # Method overriding
return "Miyov!"
class It(Hayvon):
def ovoz_chiqar(self): # Method overriding
return "Hav!"
# Test qilish
hayvonlar = [Mushuk(), It()]
for hayvon in hayvonlar:
print(hayvon.ovoz_chiqar()) # Har xil natija
Method Overriding - bola sinfda ota sinfning metodini qayta yozish:
class Shaxs:
def __init__(self, ism, yosh):
self.ism = ism
self.yosh = yosh
def salom_ber(self):
return f"Salom, men {self.ism}!"
class Talaba(Shaxs):
def __init__(self, ism, yosh, kurs):
super().__init__(ism, yosh)
self.kurs = kurs
def salom_ber(self): # Method overriding
return f"Salom, men {self.ism}, {self.kurs}-kurs talabasiman!"
class O_quvchi(Shaxs):
def __init__(self, ism, yosh, sinf):
super().__init__(ism, yosh)
self.sinf = sinf
def salom_ber(self): # Method overriding
return f"Salom, men {self.ism}, {self.sinf} sinfida o'qiyman!"
# Test qilish
shaxslar = [
Shaxs("Ali", 25),
Talaba("Zilola", 20, 2),
O_quvchi("Sardor", 16, "10-A")
]
for shaxs in shaxslar:
print(shaxs.salom_ber())
Python'da method overloading to'g'ridan-to'g'ri qo'llab-quvvatlanmaydi, lekin simulyatsiya qilinadi:
class Kalkulyator:
def qo_shish(self, a, b=None, c=None):
if b is None and c is None:
return a
elif c is None:
return a + b
else:
return a + b + c
def ko_paytirish(self, a, b=None, c=None):
if b is None and c is None:
return a
elif c is None:
return a * b
else:
return a * b * c
# Test qilish
kalkulyator = Kalkulyator()
print(kalkulyator.qo_shish(5)) # 5
print(kalkulyator.qo_shish(5, 3)) # 8
print(kalkulyator.qo_shish(5, 3, 2)) # 10
print(kalkulyator.ko_paytirish(5)) # 5
print(kalkulyator.ko_paytirish(5, 3)) # 15
print(kalkulyator.ko_paytirish(5, 3, 2)) # 30
Python'da Duck Typing - "agar u o'rdak kabi yursa va o'rdak kabi ovoz chiqarsa, demak u o'rdak" prinsipi:
class Mashina:
def harakatlanish(self):
return "Mashina yo'lda harakatlanmoqda"
class Samolyot:
def harakatlanish(self):
return "Samolyot osmonda uchmoqda"
class Kema:
def harakatlanish(self):
return "Kema dengizda suzmoqda"
def harakatlanish_funksiyasi(transport):
"""Har qanday transport obyektini qabul qiladi"""
return transport.harakatlanish()
# Test qilish
transportlar = [Mashina(), Samolyot(), Kema()]
for transport in transportlar:
print(harakatlanish_funksiyasi(transport))
Vazifa: Musiqa asboblari tizimi yarating
Musiqa_asbobi sinfi - nomi, ovoz_chiqar() metodiGitara, Piano, Skripka sinflariVaqt: 10 daqiqa ⏰
Vazifa: Ovqat tayyorlash tizimi yarating
Ovqat sinfi - nomi, tayyorlash() metodiPizza, Salat, Shashlik sinflariVaqt: 10 daqiqa ⏰
O_yinchi sinfi - nomi, harakat() metodiJangchi, Sehrgar, Kamondor sinflariO_quvchi sinfi - nomi, o_qish() metodiTalaba, O_quvchi, Magistr sinflariTransport sinfi - nomi, harakatlanish() metodiMashina, Samolyot, Kema sinflariBola sinfda ota sinf metodini qayta yozish
Bir xil nomli metodning turli parametrlarga ega bo'lishi
Obyektning turi emas, xatti-harakati muhim
Bir xil nomli metodlarning turli xil xatti-harakatlar
Keyingi dars: Encapsulation mavzusini o'rganamiz
Savollaringiz bo'lsa, yozib qoldiring! 😊
💡 Muhim eslatma:
Polymorphism yordamida kodni moslashuvchan va kengaytiriladigan qilish mumkin. Har bir sinf o'z vazifasini bajarishi kerak!