Skip to content

super()

Biror bir klassdan nasl olganda uning ba'zi metodlarini oldingisini saqlab qolgan holatda o'zgartirish kerak bo'ladi.

python
class Animal:
    def __init__(self, n, fc, fl):
        self.name = n
        self.feet_count = fc
        self.fly = fl

class Bird(Animal):
    def __init__(self, w):
        self.wild = w

    def info(self):
        return f"Bu qushning nomi {self.name}."

bird1 = Bird("Burgut", 2, True)

print(bird1.info())

Agar biz Bird klassiga yangi wild parametrini qo'shsak, Animal klassidagi name, feet_count, fly parametrlari ishlamaydi. Bu xatolikni tuzatish uchun kodni quyidagicha o'zgartiramiz.

python
class Animal:
    def __init__(self, n, fc, fl):
        self.name = n
        self.feet_count = fc
        self.fly = fl

class Bird(Animal):
    def __init__(self, n, fc, fl, w):
        Animal.__init__(self, n, fc, fl)
        self.wild = w

    def info(self):
        return f"Bu qushning nomi {self.name}."

bird1 = Bird("Burgut", 2, True, True)

print(bird1.info())

Ana endi Animal klassining __init__ metodidagi xususiyatlarni saqlab qolib, qo'shimcha parametr qo'shildi. Lekin bu universal yechim emas. Sababi ota klassning nomi boshqacha bo'lganda kod o'zgarishiga to'g'ri keladi. Kodni quyidagiga o'zgartirsak, ota klassning nomi qanday bo'lishidan qat'iy nazar uning xususiyatlarini o'zlashtiradi.

python
class Animal:
    def __init__(self, n, fc, fl):
        self.name = n
        self.feet_count = fc
        self.fly = fl

class Bird(Animal):
    def __init__(self, n, fc, fl, w):
        super().__init__(n, fc, fl)
        self.wild = w

    def info(self):
        return f"Bu qushning nomi {self.name}."

bird1 = Bird("Burgut", 2, True, True)

print(bird1.info())

super() metodidan foydalanganimizda ota klassning xususiyatlarini o'z ichiga oladi.