Darsliklar Python Meros (Sinf/Class)

Python Python Meros (Sinf/Class)

Sinf va obyekt bilan tanishganimizdan so’ng, navbat OOP’ning eng kuchli tamoyillaridan biri — meros (inheritance) ga keldi. Meros bir sinfga boshqa sinfning barcha xususiyatlarini “meros qilib olish” imkonini beradi. Bu kod takrorlanishini keskin kamaytiradi va loyihani mantiqiy iyerarxiyaga soladi.

Meros (inheritance)bir sinf (bola/vorisi) boshqa sinf (ota/asosiy) ning atribut va metodlarini o’zlashtirib olishi. Bola sinf ota sinfning hamma imkoniyatini oladi, ustiga o’ziniki qo’shadi yoki mavjudini o’zgartiradi.

Asosiy va bola sinf

Keling, umumiy Foydalanuvchi sinfi va undan meros oluvchi Admin sinfini yaratamiz:

class Foydalanuvchi:
    def __init__(self, ism):
        self.ism = ism

    def tanishtir(self):
        print(f"Men {self.ism}")

class Admin(Foydalanuvchi):
    pass

a = Admin("Master Sherkulov")
a.tanishtir()
Men Master Sherkulov

class Admin(Foydalanuvchi): — qavs ichidagi nom aynan meros olinayotgan ota sinfni bildiradi. Admin ichida hech narsa yozmasak ham (pass), u Foydalanuvchi ning tanishtir metodini to’liq meros oldi.

Metodni kengaytirish — super()

Bola sinf ota sinf konstruktorini chaqirib, ustiga o’z atributlarini qo’shishi mumkin. Buning uchun super() funksiyasi ishlatiladi:

class Foydalanuvchi:
    def __init__(self, ism):
        self.ism = ism

class Admin(Foydalanuvchi):
    def __init__(self, ism, huquq):
        super().__init__(ism)   # ota konstruktorini chaqiramiz
        self.huquq = huquq

a = Admin("Farrux", "to'liq")
print(a.ism)
print(a.huquq)
Farrux
to'liq

super().__init__(ism) ota sinfning ish qismini takrorlamasdan chaqiradi, so’ng biz huquq atributini qo’shamiz. Bu — merosning eng ko’p ishlatiladigan naqshi.

Metodni qayta yozish (override)

Bola sinf ota sinfdagi metodni o’ziga moslab qayta yozishi mumkin. Bu override deb ataladi:

class Foydalanuvchi:
    def rol(self):
        return "oddiy foydalanuvchi"

class Admin(Foydalanuvchi):
    def rol(self):
        return "administrator"

print(Foydalanuvchi().rol())
print(Admin().rol())
oddiy foydalanuvchi
administrator

Bir xil nomli rol metodi ikki sinfda turlicha ishladi. Python obyektning haqiqiy sinfiga qarab to’g’ri metodni tanlaydi — bu polimorfizm deyiladi.

Amaliyotdagi ko’rinishi

Merosni siz loyihada har kuni ko’rasiz. Masalan, Django loyihalarida barcha modellar models.Model sinfidan meros oladi:

class Tutorials(models.Model):
    desc = models.TextField()

class Lessons(models.Model):
    content = models.TextField()

Bu yerda models.Model — ota sinf. U ma’lumotlar bazasi bilan ishlashning butun murakkab mantig’ini o’z ichiga oladi, biz esa faqat kerakli maydonlarni qo’shamiz. Mana merosning haqiqiy qadri — ulkan tayyor funksionallikni ikki so’z bilan meros qilib olish.

Xulosa

Bu darsda meros tushunchasini, super() bilan ota konstruktorni chaqirish, metodni override qilish va polimorfizmni o’rgandik. Meros kodni qayta ishlatishni yangi darajaga olib chiqadi va katta loyihalarni tartibli qiladi. Keyingi darsda modullar — kodni fayllarga ajratish mavzusiga o’tamiz.