Skip to content

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 ​

python
x = "Salom Dunyo!"

print(len(x))

Tuple ​

Tuplelar uchun len() tupledagi elementlar sonini qaytaradi:

Misol ​

python
mening_tuplem = ("olma", "banan", "gilos")

print(len(mening_tuplem))

Lug'at ​

Lug'atlar uchun len() lug'atdagi kalit:qiymat juftliklari sonini qaytaradi:

Misol ​

python
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:

python
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:

python
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.

Python OOP - Polimorfizm mavzusida test

Savol 1 / 6

Dasturlashda 'Polimorfizm' (Polymorphism) so'zi nimani anglatadi?