Methodenüberschreibung in Python

Methodenüberschreibung in Python

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.

Überschreiben in Python

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

  1. 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.




    # 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:




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

    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