Voorwaarde: Overerving in Python
Het overschrijven van methoden is een mogelijkheid van elke objectgeoriënteerde programmeertaal waarmee een subklasse of onderliggende klasse een specifieke implementatie kan bieden van een methode die al wordt geleverd door een van de superklassen of bovenliggende klassen. Wanneer een methode in een subklasse dezelfde naam, dezelfde parameters of handtekening en hetzelfde retourtype (of subtype) heeft als een methode in zijn superklasse, dan wordt gezegd dat de methode in de subklasse overschrijven de methode in de superklasse.

De versie van een methode die wordt uitgevoerd, wordt bepaald door het object dat wordt gebruikt om de methode aan te roepen. Als een object van een bovenliggende klasse wordt gebruikt om de methode aan te roepen, zal de versie in de bovenliggende klasse worden uitgevoerd, maar als een object van de subklasse wordt gebruikt om de methode aan te roepen, zal de versie in de onderliggende klasse worden uitgevoerd. Met andere woorden: het is het type object waarnaar wordt verwezen (niet het type referentievariabele) dat bepaalt welke versie van een overschreven methode zal worden uitgevoerd.
Voorbeeld:
# Python program to demonstrate> # method overriding> > > # Defining parent class> class> Parent():> > ># Constructor> >def> __init__(>self>):> >self>.value>=> 'Inside Parent'> > ># Parent's show method> >def> show(>self>):> >print>(>self>.value)> > # Defining child class> class> Child(Parent):> > ># Constructor> >def> __init__(>self>):> >self>.value>=> 'Inside Child'> > ># Child's show method> >def> show(>self>):> >print>(>self>.value)> > > # Driver's code> obj1>=> Parent()> obj2>=> Child()> > obj1.show()> obj2.show()> |
>
>
Uitgang:
Inside Parent Inside Child>
Methode overschrijven met overerving op meerdere en meerdere niveaus
- Meervoudige erfenis: Wanneer een klasse is afgeleid van meer dan één basisklasse, wordt dit meervoudige overerving genoemd.
Voorbeeld: Laten we een voorbeeld bekijken waarin we een methode van slechts één bovenliggende klasse willen overschrijven. Hieronder vindt u de implementatie.
hoe u de schermgrootte kunt controleren
# Python program to demonstrate># overriding in multiple inheritance>>># Defining parent class 1>class>Parent1():>>># Parent's show method>>def>show(>self>):>>print>(>'Inside Parent1'>)>># Defining Parent class 2>class>Parent2():>>># Parent's show method>>def>display(>self>):>>print>(>'Inside Parent2'>)>>># Defining child class>class>Child(Parent1, Parent2):>>># Child's show method>>def>show(>self>):>>print>(>'Inside Child'>)>>># Driver's code>obj>=>Child()>>obj.show()>obj.display()>>
>
Uitgang:
Inside Child Inside Parent2>
Overerving op meerdere niveaus: wanneer we een kind- en kleinkindrelatie hebben.Voorbeeld: Laten we een voorbeeld bekijken waarin we slechts één methode van een van de bovenliggende klassen willen overschrijven. Hieronder vindt u de implementatie.
# Python program to demonstrate># overriding in multilevel inheritance>>># Python program to demonstrate># overriding in multilevel inheritance>>>class>Parent():>>># Parent's show method>>def>display(>self>):>>print>(>'Inside Parent'>)>>># Inherited or Sub class (Note Parent in bracket)>class>Child(Parent):>>># Child's show method>>def>show(>self>):>>print>(>'Inside Child'>)>># Inherited or Sub class (Note Child in bracket)>class>GrandChild(Child):>>># Child's show method>>def>show(>self>):>>print>(>'Inside GrandChild'>)>># Driver code>g>=>GrandChild()>g.show()>g.display()>>
>
Uitgang:
Inside GrandChild Inside Parent>
De methode van de Parent aanroepen binnen de overschreven methode
Methoden van bovenliggende klassen kunnen ook worden aangeroepen binnen de overschreven methoden. Dit kan doorgaans op twee manieren worden bereikt.
- Klassenaam gebruiken: De klassenmethoden van Parent kunnen worden aangeroepen met behulp van de Parent
classname.method>binnen de overschreven methode.Voorbeeld:
Java-scheidingsteken
# Python program to demonstrate> # calling the parent's class method> # inside the overridden method> > > class> Parent():> > >def> show(>self>):> >print>(>'Inside Parent'>)> > class> Child(Parent):> > >def> show(>self>):> > ># Calling the parent's class> ># method> >Parent.show(>self>)> >print>(>'Inside Child'>)> > # Driver's code> obj>=> Child()> obj.show()> |
>
>
Uitgang:
Inside Parent Inside Child>Super(): Python gebruiken
super()>functie biedt ons de mogelijkheid om expliciet naar de bovenliggende klasse te verwijzen. Het is in principe handig als we superklassefuncties moeten aanroepen. Het retourneert het proxy-object waarmee we de ouderklasse kunnen verwijzen via 'super'.Voorbeeld 1:
# Python program to demonstrate> # calling the parent's class method> # inside the overridden method using> # super()> > > class> Parent():> > >def> show(>self>):> >print>(>'Inside Parent'>)> > class> Child(Parent):> > >def> show(>self>):> > ># Calling the parent's class> ># method> >super>().show()> >print>(>'Inside Child'>)> > # Driver's code> obj>=> Child()> obj.show()> |
>
>
Uitgang:
Inside Parent Inside Child>
Voorbeeld 2:
tekenreeks naar json-object converteren
# Program to define the use of super()> # function in multiple inheritance> class> GFG1:> >def> __init__(>self>):> >print>(>'HEY !!!!!! GfG I am initialised(Class GEG1)'>)> > >def> sub_GFG(>self>, b):> >print>(>'Printing from class GFG1:'>, b)> > # class GFG2 inherits the GFG1> class> GFG2(GFG1):> >def> __init__(>self>):> >print>(>'HEY !!!!!! GfG I am initialised(Class GEG2)'>)> >super>().__init__()> > >def> sub_GFG(>self>, b):> >print>(>'Printing from class GFG2:'>, b)> >super>().sub_GFG(b>+> 1>)> > # class GFG3 inherits the GFG1 ang GFG2 both> class> GFG3(GFG2):> >def> __init__(>self>):> >print>(>'HEY !!!!!! GfG I am initialised(Class GEG3)'>)> >super>().__init__()> > >def> sub_GFG(>self>, b):> >print>(>'Printing from class GFG3:'>, b)> >super>().sub_GFG(b>+> 1>)> > > # main function> if> __name__>=>=> '__main__'>:> > ># created the object gfg> >gfg>=> GFG3()> > ># calling the function sub_GFG3() from class GHG3> ># which inherits both GFG1 and GFG2 classes> >gfg.sub_GFG(>10>)> |
>
>
Uitgang:
HEY !!!!!! GfG I am initialised(Class GEG3) HEY !!!!!! GfG I am initialised(Class GEG2) HEY !!!!!! GfG I am initialised(Class GEG1) Printing from class GFG3: 10 Printing from class GFG2: 11 Printing from class GFG1: 12>