CodeGym /Kurslar /Python SELF AZ /İyerarxiyanın İnisializasiyası

İyerarxiyanın İnisializasiyası

Python SELF AZ
Səviyyə , Dərs
Mövcuddur

7.1 super() metodu

İyerarxiya üzrə mirasdan danışmağa başladığımız üçün baza sinifinin sahələri və metodları ilə işləmə nüanslarını öyrənmək faydalı olar. Bunun üçün Python-da xüsusi bir super() metodu var. Bu metod, övlad sinifdə baza sinifinin metodlarını çağırmaq üçün istifadə olunur.

Onun üç əsas istifadə sahəsi var:

Valideyn sinfin metodlarını çağırmaq:

super() metodu övlad sinifdə valideyn sinfin metodunu heç bir şəkildə valideyn sinfin adını açıq şəkildə göstərmədən çağırmağa imkan verir. Bu, xüsusilə çoxsaylı miras ilə işləyərkən faydalıdır və siniflər iyerarxiyasında dəyişikliklər edərkən səhvlərdən qaçmağa kömək edir.

Baza siniflərin inisializasiyası:

super() tez-tez övlad sinfin konstruktorunda baza sinfinin konstruktorunu çağırmaq üçün istifadə olunur ki, baza sinfinin atributlarını övlad sinifdə inisializasiya etmək mümkün olsun.

Çoxsaylı mirasa dəstək:

Çoxsaylı miras halında super() metodların çağırılma sırasını (MRO, Method Resolution Order) düzgün şəkildə təyin edir ki, bu da valideyn siniflərin metodlarının açıq şəkildə çağırılmasına nisbətən daha üstünlük təşkil edir. Bu barədə bir az sonra danışacağıq.

7.2 Əsas sinifin konstruktoru

Əsas sinifin konstruktoru açıq-aşkar çağırılmalıdır. Bu avtomatik olaraq baş verir kimi görünə bilər, amma əslində belə deyil. Əsas siniflərin konstruktorlarını hər zaman açıq-aşkar çağırmaq lazımdır, çünki çox vaxt onlara xüsusi arqumentlər ötürmək lazımdır.

Nümunə:


class Animal:
    def __init__(self, type, name):
        self.type = type
        self.name = name
         
        
class Dog(Animal):
    def __init__(self, name):
        super().__init__("İt", name)  # Əsas sinifin konstruktorunun çağırılması
        
class Cat(Animal):
    def __init__(self, name):
        super().__init__("Pişik", name)  # Əsas sinifin konstruktorunun çağırılması
        
        
# Dog obyektinin yaradılması
dog = Dog("Buddy")
print(dog) 

Bu nümunədə əsas sinifin (Animal) konstruktorunun iki parametri var: heyvanın tipi və onun adı. Amma törəmə siniflərin yalnız bir parametri var — yalnız ad.

Məhz DogCat siniflərinin konstruktorlarında qərar verilir ki, əsas sinifin konstruktoruna nə ötürülsün — heyvan tiplərinin adları «İt» və «Pişik».

Belə ki:

  • Əsas sinifin konstruktoru mütləq tövsiəlmə sinifin konstruktorunda çağırılmalıdır.
  • Bunun üçün super() metodundan istifadə etmək lazımdır.
  • self parametrini ayrıca ötürməyə ehtiyac yoxdur — Python bunu avtomatik olaraq metoda çağırışda daxil edəcək.

7.3 super() metodundan istifadə

Python-da super() metodu təkcə konstruktorlarda deyil, həmçinin digər class metodlarında istifadə edilə bilər ki, bu da parent class metodlarını çağırmağa imkan yaradır. Bu, parent class-da müəyyən edilmiş metodu əlavələr və ya dəyişikliklərlə genişləndirmək lazım olduqda faydalı ola bilər.

Bir neçə nümunəyə baxaq:

Parent class metodunun child metodunda çağrılması

Bu nümunədə Dog class-ındakı speak() metodu əvvəlcə Animal class-ındakı speak() metodunu super() vasitəsilə çağırır, sonra isə öz davranışını əlavə edir.


class Animal:
    def speak(self):
        return "Hər hansı bir ümumi heyvan səsi"
        

class Dog(Animal):
    def speak(self):
        parent_speech = super().speak()  # Parent class metodunun çağırılması
        return f"{parent_speech} Və it hürür!"
        
dog = Dog()
print(dog.speak())  # Nəticə: Hər hansı bir ümumi heyvan səsi Və it hürür!

Parent class metodunun vəziyyəti yoxlamaq üçün çağırılması

Bu nümunədə Dog class-ındakı check_health() metodu parent class-ın check_health() metodunu çağırır və əlavə yoxlamalar əlavə edir.


class Animal:
    def check_health(self):
        return "Heyvan sağlamdır"
        

class Dog(Animal):
    def check_health(self):
        parent_check = super().check_health()  # Parent class metodunun çağırılması
        return f"{parent_check}. İt gəzməyə ehtiyac duyar!"
        
dog = Dog()
print(dog.check_health())  # Nəticə: Heyvan sağlamdır. İt gəzməyə ehtiyac duyar!

Parent class metodunun vəziyyəti dəyişən metodda çağırılması

Bu nümunədə SavingsAccount class-ındakı withdraw() metodu əvvəlcə məbləğin çıxarma limitini aşmadığını yoxlayır, daha sonra əməliyyatı icra etmək üçün BankAccount class-ındakı withdraw() metodunu çağırır.


class BankAccount:
    def __init__(self, balance):
        self.balance = balance
        

    def withdraw(self, amount):
        if self.balance >= amount:
            self.balance -= amount
            return f"{amount} çıxarıldı. Yeni balans: {self.balance}"
        return "Kifayət qədər vəsait yoxdur"
        

class SavingsAccount(BankAccount):
    def withdraw(self, amount):
        if amount > 1000:
            return "Çıxarma limiti aşılmışdır"
        return super().withdraw(amount)  # Parent class metodunun çağırılması
        

savings = SavingsAccount(1500)
print(savings.withdraw(500))  # Nəticə: 500 çıxarıldı. Yeni balans: 1000
print(savings.withdraw(1500))  # Nəticə: Çıxarma limiti aşılmışdır
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION