Skip to content

Python - Meros Olish

Python Meros Olish

Meros olish bizga boshqa sinfdan barcha metodlar va xususiyatlarni meros qilib oladigan sinfni aniqlash imkonini beradi.

Ota-ona sinfi meros qilinadigan sinf bo'lib, u baza sinf deb ham ataladi.

Bola sinfi boshqa sinfdan meros oladigan sinf bo'lib, u tushirilgan sinf deb ham ataladi.

Ota-ona Sinfini Yaratish

Har qanday sinf ota-ona sinfi bo'lishi mumkin, shuning uchun sintaksis boshqa sinf yaratish bilan bir xil:

Misol

Shaxs nomli sinf yarating, ism va familiya xususiyatlari va ism_chop_etish metodiga ega:

python
class Shaxs:
    def __init__(self, ism, familiya):
        self.ism = ism
        self.familiya = familiya

    def ism_chop_etish(self):
        print(self.ism, self.familiya)

# Shaxs sinfidan obyekt yarating va ism_chop_etish metodini bajaring:
x = Shaxs("John", "Doe")
x.ism_chop_etish()

Bola Sinfini Yaratish

Boshqa sinfdan funksionallikni meros qilib oladigan sinf yaratish uchun bola sinfni yaratishda ota-ona sinfni parametr sifatida uzating:

Misol

Talaba nomli sinf yarating, u Shaxs sinfidan xususiyatlar va metodlarni meros qilib oladi:

python
class Talaba(Shaxs):
    pass

Eslatma: Agar sinfga boshqa xususiyatlar yoki metodlar qo'shishni xohlamasangiz, pass kalit so'zidan foydalaning.

Endi Talaba sinfi Shaxs sinfi bilan bir xil xususiyatlar va metodlarga ega.

Misol

Talaba sinfidan obyekt yarating va ism_chop_etish metodini bajaring:

python
x = Talaba("Mike", "Olsen")
x.ism_chop_etish()

__init__() Funksiyasini Qo'shish

Hozirgacha biz ota-ona sinfidan xususiyatlar va metodlarni meros qilib oladigan bola sinfni yaratdik.

Biz bola sinfga pass kalit so'zi o'rniga __init__() funksiyasini qo'shmoqchimiz.

Eslatma: __init__() funksiyasi har safar sinf yangi obyekt yaratish uchun ishlatilganda avtomatik ravishda chaqiriladi.

Misol

Talaba sinfga __init__() funksiyasini qo'shing:

python
class Talaba(Shaxs):
    def __init__(self, ism, familiya):
        # xususiyatlarni qo'shing va h.k.

__init__() funksiyasini qo'shganingizda, bola sinf ota-ona sinfning __init__() funksiyasini meros qilib olmaydi.

Eslatma: Bola sinfning __init__() funksiyasi ota-ona sinfning __init__() funksiyasining merosini qayta yozadi.

Ota-ona sinfning __init__() funksiyasining merosini saqlab qolish uchun ota-ona sinfning __init__() funksiyasini chaqiring:

Misol

python
class Talaba(Shaxs):
    def __init__(self, ism, familiya):
        Shaxs.__init__(self, ism, familiya)

Endi biz __init__() funksiyasini muvaffaqiyatli qo'shdik va ota-ona sinfning merosini saqlab qoldik, endi __init__() funksiyasiga funksionallik qo'shishga tayyormiz.

super() Funksiyasidan Foydalanish

Python'da super() funksiyasi ham mavjud bo'lib, u bola sinfga ota-ona sinfdan barcha metodlar va xususiyatlarni meros qilib olish imkonini beradi:

Misol

python
class Talaba(Shaxs):
    def __init__(self, ism, familiya):
        super().__init__(ism, familiya)

super() funksiyasidan foydalangan holda, ota-ona elementning nomini ishlatishingiz shart emas, u avtomatik ravishda ota-onadan metodlar va xususiyatlarni meros qilib oladi.

Xususiyatlar Qo'shish

Misol

Talaba sinfga bitiruv_yili nomli xususiyat qo'shing:

python
class Talaba(Shaxs):
    def __init__(self, ism, familiya):
        super().__init__(ism, familiya)
        self.bitiruv_yili = 2019

Quyidagi misolda 2019 yili o'zgaruvchi bo'lishi kerak va talaba obyektlarini yaratishda Talaba sinfga uzatilishi kerak. Buning uchun __init__() funksiyasiga yana bir parametr qo'shing:

Misol

yil parametrini qo'shing va obyektlarni yaratishda to'g'ri yilni uzating:

python
class Talaba(Shaxs):
    def __init__(self, ism, familiya, yil):
        super().__init__(ism, familiya)
        self.bitiruv_yili = yil

x = Talaba("Mike", "Olsen", 2019)

Metodlar Qo'shish

Misol

Talaba sinfga xush_kelibsiz nomli metod qo'shing:

python
class Talaba(Shaxs):
    def __init__(self, ism, familiya, yil):
        super().__init__(ism, familiya)
        self.bitiruv_yili = yil

    def xush_kelibsiz(self):
        print("Xush kelibsiz", self.ism, self.familiya, self.bitiruv_yili, "yil sinfiga")

Agar bola sinfda ota-ona sinfdagi funksiya bilan bir xil nomdagi metod qo'shsangiz, ota-ona metodining merosi qayta yoziladi.