Python - Polimorfizm
Python Polimorfizmi
"Polimorfizm" so'zi "ko'p shakllar" degan ma'noni anglatadi va dasturlashda bu bir xil nomga ega bo'lgan metodlar/funksiyalar/operatorlarning ko'p obyektlar yoki sinflarda bajarilishi mumkinligini anglatadi.
Funksiya Polimorfizmi
Turli obyektlarda ishlatilishi mumkin bo'lgan Python funksiyasiga misol sifatida len() funksiyasini keltirish mumkin.
Satr
Satrlar uchun len() belgilar sonini qaytaradi:
Misol
x = "Salom Dunyo!"
print(len(x))Tuple
Tuplelar uchun len() tupledagi elementlar sonini qaytaradi:
Misol
mening_tuplem = ("olma", "banan", "gilos")
print(len(mening_tuplem))Lug'at
Lug'atlar uchun len() lug'atdagi kalit:qiymat juftliklari sonini qaytaradi:
Misol
ushbu_lugat = {
"brend": "Ford",
"model": "Mustang",
"yil": 1964
}
print(len(ushbu_lugat))Sinf Polimorfizmi
Polimorfizm ko'pincha sinf metodlarida ishlatiladi, bu yerda biz bir xil nomga ega bo'lgan bir nechta sinflarga ega bo'lishimiz mumkin.
Masalan, bizda uchta sinf bor deylik: Avto, Qayiq va Samolyot, va ularning hammasida harakat() deb nomlangan metod bor:
Misol
Bir xil metodga ega turli sinflar:
class Avto:
def __init__(self, brend, model):
self.brend = brend
self.model = model
def harakat(self):
print("Haydash!")
class Qayiq:
def __init__(self, brend, model):
self.brend = brend
self.model = model
def harakat(self):
print("Suzish!")
class Samolyot:
def __init__(self, brend, model):
self.brend = brend
self.model = model
def harakat(self):
print("Uchish!")
avto1 = Avto("Ford", "Mustang") # Avto obyektini yaratish
qayiq1 = Qayiq("Ibiza", "Touring 20") # Qayiq obyektini yaratish
samolyot1 = Samolyot("Boeing", "747") # Samolyot obyektini yaratish
for x in (avto1, qayiq1, samolyot1):
x.harakat()Oxiridagi for tsiklga qarang. Polimorfizm tufayli biz uchta sinf uchun ham bir xil metodni bajarishimiz mumkin.
Meros Sinf Polimorfizmi
Bir xil nomga ega bola sinflar bilan sinflar haqida nima deyish mumkin? Bu yerda polimorfizmdan foydalana olamizmi?
Ha. Agar yuqoridagi misoldan foydalansak va Transport deb nomlangan ota-ona sinf yaratsak, va Avto, Qayiq, Samolyot sinflarini Transportning bola sinflari qilsak, bola sinflar Transportning metodlarini meros qilib oladi, lekin ularni qayta yozishi mumkin:
Misol
Transport nomli sinf yarating va Avto, Qayiq, Samolyot sinflarini Transportning bola sinflari qiling:
class Transport:
def __init__(self, brend, model):
self.brend = brend
self.model = model
def harakat(self):
print("Harakat!")
class Avto(Transport):
pass
class Qayiq(Transport):
def harakat(self):
print("Suzish!")
class Samolyot(Transport):
def harakat(self):
print("Uchish!")
avto1 = Avto("Ford", "Mustang") # Avto obyektini yaratish
qayiq1 = Qayiq("Ibiza", "Touring 20") # Qayiq obyektini yaratish
samolyot1 = Samolyot("Boeing", "747") # Samolyot obyektini yaratish
for x in (avto1, qayiq1, samolyot1):
print(x.brend)
print(x.model)
x.harakat()Bola sinflar ota-ona sinfdan xususiyatlar va metodlarni meros qilib oladi.
Yuqoridagi misolda Avto sinf bo'sh ekanligini ko'rishingiz mumkin, lekin u Transportdan brend, model va harakat() metodlarini meros qilib oladi.
Qayiq va Samolyot sinflari ham Transportdan brend, model va harakat() metodlarini meros qilib oladi, lekin ikkalasi ham harakat() metodini qayta yozadi.
Polimorfizm tufayli biz barcha sinflar uchun bir xil metodni bajarishimiz mumkin.
