Python süper ()

Super () yerleşiği, temel sınıfın yöntemlerine erişmemize izin veren bir proxy nesnesi (üst sınıfın geçici nesnesi) döndürür.

Python'da super()iki ana kullanım durumu vardır:

  • Temel sınıf adını açıkça kullanmaktan kaçınmamıza izin verir
  • Çoklu Kalıtım ile Çalışma

Örnek 1: Tek Kalıtım ile süper ()

Tek kalıtım durumunda, temel sınıfa super().

 class Mammal(object): def __init__(self, mammalName): print(mammalName, 'is a warm-blooded animal.') class Dog(Mammal): def __init__(self): print('Dog has four legs.') super().__init__('Dog') d1 = Dog()

Çıktı

Köpeğin dört bacağı vardır. Köpek sıcakkanlı bir hayvandır.

Burada, __init__()kodu kullanarak Mammal sınıfının (Dog sınıfından) yöntemini çağırdık

 super () .__ init __ ('Köpek')

onun yerine

 Memeli .__ init __ (kendisi, 'Köpek')

Üyelerini çağırdığımızda temel sınıfın adını belirtmemize gerek olmadığından, (gerekirse) temel sınıf adını kolayca değiştirebiliriz.

 # changing base class to CanidaeFamily class Dog(CanidaeFamily): def __init__(self): print('Dog has four legs.') # no need to change this super().__init__('Dog')

super()Yerleşik bir proxy nesnesi, yetkisi aracılığıyla yöntemlerini temel sınıf çağırabilir yerine nesnesini geri gönderir. Buna dolaylama denir (temel nesneye referans verme yeteneği super())

İndirme işlemi çalışma zamanında hesaplandığından, farklı zamanlarda farklı temel sınıfları kullanabiliriz (gerekirse).

Örnek 2: Çoklu Kalıtım ile super ()

 class Animal: def __init__(self, Animal): print(Animal, 'is an animal.'); class Mammal(Animal): def __init__(self, mammalName): print(mammalName, 'is a warm-blooded animal.') super().__init__(mammalName) class NonWingedMammal(Mammal): def __init__(self, NonWingedMammal): print(NonWingedMammal, "can't fly.") super().__init__(NonWingedMammal) class NonMarineMammal(Mammal): def __init__(self, NonMarineMammal): print(NonMarineMammal, "can't swim.") super().__init__(NonMarineMammal) class Dog(NonMarineMammal, NonWingedMammal): def __init__(self): print('Dog has 4 legs.'); super().__init__('Dog') d = Dog() print('') bat = NonMarineMammal('Bat')

Çıktı

Köpeğin 4 bacağı vardır. Köpek yüzemez. Köpek uçamaz. Köpek sıcakkanlı bir hayvandır. Köpek bir hayvandır. Yarasa yüzemez. Yarasa sıcakkanlı bir hayvandır. Yarasa bir hayvandır.

Yöntem Çözümleme Sırası (MRO)

Yöntem Çözümleme Sırası (MRO), yöntemlerin çoklu miras varlığında miras alınması gereken sıradır. __mro__Özniteliği kullanarak MRO'yu görüntüleyebilirsiniz .

 >>> Dog .__ mro__ (,,,,,)

MRO şu şekilde çalışır:

  • Türetilmiş çağrılardaki bir yöntem her zaman temel sınıfın yönteminden önce çağrılır.
    Örneğimizde, Dog sınıfı NonMarineMammal veya NoneWingedMammal'den önce çağrılır. Bu iki sınıfa Animal den önce Mammal den önce, Animal class ise nesneden önce çağrılır.
  • Eğer birden fazla Dog(NonMarineMammal, NonWingedMammal)üst öğe varsa, ilk önce NonMarineMammal yöntemleri çağrılır çünkü ilk önce görünür.

Daha fazla bilgi edinmek için super()Python'un süper () olarak kabul edilen süper () sayfasını ziyaret edin!

Ilginç makaleler...