Python super ()

Sisseehitatud super () tagastab proksiobjekti (ülemklassi ajutine objekt), mis võimaldab meil pääseda juurde baasklassi meetoditele.

Pythonis super()on kaks peamist kasutusjuhtumit:

  • Võimaldab meil vältida baasklassi nime selgesõnalist kasutamist
  • Töötamine mitme pärandiga

Näide 1: super () ühe pärandiga

Ühekordse pärimise korral võimaldab see meil viidata baasklassile 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()

Väljund

Koeral on neli jalga. Koer on soojavereline loom.

Siinkohal nimetasime __init__()koodi Imetajate klassi (koerte klassist) meetodit

 super () .__ init __ ('koer')

selle asemel

 Imetaja .__ init __ (ise, koer)

Kuna me ei pea selle liikmetele helistades määrama baasklassi nime, saame baasklassi nime hõlpsasti muuta (kui vaja).

 # 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()BUILTIN tagastab proxy objekti, asenda objekti, mida saab helistada meetodeid baasklass delegeerimise kaudu. Seda nimetatakse indirectioniks (võime alusobjektile viidata super())

Kuna indirection arvutatakse tööajal, saame kasutada erinevaid baasklasse erinevatel aegadel (kui vaja).

Näide 2: super () mitme pärandiga

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

Väljund

Koeral on 4 jalga. Koer ei oska ujuda. Koer ei saa lennata. Koer on soojavereline loom. Koer on loom. Nahkhiir ei oska ujuda. Nahkhiir on soojavereline loom. Nahkhiir on loom.

Meetodi lahendamise järjekord (MRO)

Method Resolution Order (MRO) on järjekord, milles meetodid tuleks pärida mitmekordse pärimise korral. __mro__Atribuudi abil saate MRO-d vaadata .

 >>> Koer .__ mro__ (,,,,,)

MRO töötab nii:

  • Tuletatud kõnede meetodit kutsutakse alati enne baasklassi meetodit.
    Meie näites nimetatakse koeraklassi enne NonMarineMammal või NoneWingedMammal. Neid kahte klassi nimetatakse enne imetajat, mida nimetatakse enne looma, ja looma klassi nimetatakse objekti ees.
  • Kui sarnaseid vanemaid on mitu Dog(NonMarineMammal, NonWingedMammal), kasutatakse kõigepealt NonMarineMammali meetodeid, kuna see ilmub esimesena.

Lisateabe saamiseks super()külastage Pythoni superi (), mida peetakse super!

Huvitavad Artiklid...