Voraussetzung: Vererbung in Python
Das Überschreiben von Methoden ist eine Fähigkeit jeder objektorientierten Programmiersprache, die es einer Unterklasse oder untergeordneten Klasse ermöglicht, eine bestimmte Implementierung einer Methode bereitzustellen, die bereits von einer ihrer Oberklassen oder übergeordneten Klassen bereitgestellt wird. Wenn eine Methode in einer Unterklasse denselben Namen, dieselben Parameter oder dieselbe Signatur und denselben Rückgabetyp (oder Untertyp) wie eine Methode in ihrer Oberklasse hat, spricht man von der Methode in der Unterklasse überschreiben die Methode in der Superklasse.

Die Version einer Methode, die ausgeführt wird, wird durch das Objekt bestimmt, das zum Aufrufen verwendet wird. Wenn ein Objekt einer übergeordneten Klasse zum Aufrufen der Methode verwendet wird, wird die Version in der übergeordneten Klasse ausgeführt. Wenn jedoch ein Objekt der Unterklasse zum Aufrufen der Methode verwendet wird, wird die Version in der untergeordneten Klasse ausgeführt. Mit anderen Worten: Es ist der Typ des Objekts, auf das verwiesen wird (nicht der Typ der Referenzvariablen), der bestimmt, welche Version einer überschriebenen Methode ausgeführt wird.
Beispiel:
# 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()> |
>
>
Ausgabe:
Inside Parent Inside Child>
Methodenüberschreibung mit mehrfacher und mehrstufiger Vererbung
- Mehrfachvererbung: Wenn eine Klasse von mehr als einer Basisklasse abgeleitet ist, spricht man von Mehrfachvererbung.
Beispiel: Betrachten wir ein Beispiel, in dem wir eine Methode nur einer übergeordneten Klasse überschreiben möchten. Nachfolgend finden Sie die Implementierung.
Einfügungssortierung in Java
# 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()>>
>
Ausgabe:
Inside Child Inside Parent2>
Mehrstufige Vererbung: Wenn wir eine Beziehung zwischen Kind und Enkelkind haben.Beispiel: Betrachten wir ein Beispiel, in dem wir nur eine Methode einer ihrer übergeordneten Klassen überschreiben möchten. Nachfolgend finden Sie die Implementierung.
# 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()>>
>
Ausgabe:
Inside GrandChild Inside Parent>
Aufrufen der Parent-Methode innerhalb der überschriebenen Methode
Innerhalb der überschriebenen Methoden können auch übergeordnete Klassenmethoden aufgerufen werden. Dies kann im Allgemeinen auf zwei Arten erreicht werden.
- Mithilfe des Klassennamens: Die Methoden der übergeordneten Klasse können mithilfe des übergeordneten Elements aufgerufen werden
classname.method>innerhalb der überschriebenen Methode.Beispiel:
Prime-Programm in Java
# 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()> |
>
>
Ausgabe:
Inside Parent Inside Child>Verwenden von Super(): Python
super()>Die Funktion bietet uns die Möglichkeit, explizit auf die übergeordnete Klasse zu verweisen. Es ist grundsätzlich nützlich, wenn wir Oberklassenfunktionen aufrufen müssen. Es gibt das Proxy-Objekt zurück, das es uns ermöglicht, über „super“ auf die übergeordnete Klasse zu verweisen.Beispiel 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()> |
>
>
Ausgabe:
Inside Parent Inside Child>
Beispiel 2:
# 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>)> |
>
vergleichen mit in Java
>
Ausgabe:
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>