Python super ()

Super () builtin mengembalikan objek proxy (objek sementara superclass) yang memungkinkan kita mengakses metode kelas dasar.

Di Python, super()memiliki dua kasus penggunaan utama:

  • Memungkinkan kita untuk menghindari penggunaan nama kelas dasar secara eksplisit
  • Bekerja dengan Banyak Warisan

Contoh 1: super () dengan Single Inheritance

Dalam kasus warisan tunggal, ini memungkinkan kita untuk merujuk kelas dasar dengan 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()

Keluaran

Anjing memiliki empat kaki. Anjing adalah hewan berdarah panas.

Di sini, kami memanggil __init__()metode kelas Mamalia (dari kelas Anjing) menggunakan kode

 super () .__ init __ ('Anjing')

dari pada

 Mamalia .__ init __ (diri, 'Anjing')

Karena kita tidak perlu menentukan nama kelas dasar ketika memanggil anggotanya, kita dapat dengan mudah mengubah nama kelas dasar (jika perlu).

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

The super()builtin mengembalikan sebuah objek proxy, benda pengganti yang dapat memanggil metode dari kelas dasar melalui delegasi. Ini disebut indirection (kemampuan untuk mereferensikan objek dasar dengan super())

Karena tipuan dihitung pada waktu proses, kita dapat menggunakan kelas dasar yang berbeda pada waktu yang berbeda (jika perlu).

Contoh 2: super () dengan Warisan Ganda

 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')

Keluaran

Anjing memiliki 4 kaki. Anjing tidak bisa berenang. Anjing tidak bisa terbang. Anjing adalah hewan berdarah panas. Anjing adalah binatang. Kelelawar tidak bisa berenang. Kelelawar adalah hewan berdarah panas. Kelelawar adalah binatang.

Metode Resolusi Order (MRO)

Method Resolution Order (MRO) adalah urutan metode yang harus diwarisi dengan adanya beberapa pewarisan. Anda dapat melihat MRO dengan menggunakan __mro__atribut.

 >>> Anjing .__ mro__ (,,,,,)

Inilah cara kerja MRO:

  • Metode dalam panggilan turunan selalu dipanggil sebelum metode kelas dasar.
    Dalam contoh kami, kelas Anjing dipanggil sebelum NonMarineMammal atau NoneWingedMammal. Kedua kelas ini disebut sebelum Mamalia, yang disebut sebelum Hewan, dan kelas Hewan disebut sebelum objek.
  • Jika ada beberapa orang tua yang suka Dog(NonMarineMammal, NonWingedMammal), metode NonMarineMammal dipanggil lebih dulu karena muncul lebih dulu.

Untuk mempelajari lebih lanjut super(), kunjungi Python super () dianggap super!

Artikel yang menarik...