logo

Suprascrierea metodei în Python

Condiție preliminară: Moștenirea în Python

Suprascrierea metodei este o capacitate a oricărui limbaj de programare orientat pe obiecte care permite unei subclase sau unei clase copil să ofere o implementare specifică a unei metode care este deja furnizată de una dintre superclasele sau clasele părinte ale acesteia. Când o metodă dintr-o subclasă are același nume, aceiași parametri sau semnătură și același tip de returnare (sau sub-tip) ca o metodă din super-clasa, atunci metoda din subclasă se spune că trece peste metoda din superclasa.



overriding-in-python

Versiunea unei metode care este executată va fi determinată de obiectul care este utilizat pentru a o invoca. Dacă un obiect al unei clase părinte este folosit pentru a invoca metoda, atunci versiunea din clasa părinte va fi executată, dar dacă un obiect al subclasei este folosit pentru a invoca metoda, atunci versiunea din clasa copil va fi executată. Cu alte cuvinte, tipul obiectului la care se face referire (nu tipul variabilei de referință) determină ce versiune a unei metode suprascrise va fi executată.

Exemplu:








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

>

>

Ieșire:

 Inside Parent Inside Child>

Suprascrierea metodei cu moștenire multiplă și pe mai multe niveluri

  1. Moștenire multiplă: Când o clasă este derivată din mai multe clase de bază, se numește moștenire multiplă.

    Exemplu: Să luăm în considerare un exemplu în care dorim să înlocuim o metodă dintr-o singură clasă părinte. Mai jos este implementarea.

    convenție de denumire pentru 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()>

    >

    >

    Ieșire:

     Inside Child Inside Parent2>
    Moștenirea pe mai multe niveluri: Când avem o relație între copil și nepot.

    Exemplu: Să luăm în considerare un exemplu în care dorim să suprascriem doar o metodă a uneia dintre clasele sale părinte. Mai jos este implementarea.




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

    >

    >

    Ieșire:

     Inside GrandChild Inside Parent>

Apelarea metodei Parentului în cadrul metodei suprascrise

Metodele clasei părinte pot fi apelate și în cadrul metodelor suprascrise. Acest lucru poate fi realizat în general prin două moduri.

    Folosind Classname: Metodele de clasă ale părintelui pot fi apelate folosind Parentclassname.method>în cadrul metodei suprascrise.

    Exemplu:




    caracter în int 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()>

    >

    >

    Ieșire:

     Inside Parent Inside Child>
    Folosind Super(): Pythonsuper()>funcția ne oferă posibilitatea de a ne referi în mod explicit la clasa părinte. Este practic util acolo unde trebuie să apelăm funcții de superclasă. Returnează obiectul proxy care ne permite să referim clasa părinte prin „super”.

    Exemplul 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()>

    șir comparabil în java

    >

    >

    Ieșire:

     Inside Parent Inside Child>

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

    >

    >

    Ieșire:

     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>