logo

Anulació de mètodes a Python

Requisit previ: Herència en Python

La substitució de mètodes és una habilitat de qualsevol llenguatge de programació orientat a objectes que permet que una subclasse o classe fill proporcioni una implementació específica d'un mètode que ja proporciona una de les seves superclasses o classes pare. Quan un mètode d'una subclasse té el mateix nom, els mateixos paràmetres o signatura i el mateix tipus de retorn (o subtipus) que un mètode de la seva superclasse, es diu que el mètode de la subclasse és anul·lar el mètode a la superclasse.



anul·lació-en-python

La versió d'un mètode que s'executa estarà determinada per l'objecte que s'utilitza per invocar-lo. Si s'utilitza un objecte d'una classe pare per invocar el mètode, s'executarà la versió de la classe pare, però si s'utilitza un objecte de la subclasse per invocar el mètode, s'executarà la versió de la classe secundaria. En altres paraules, és el tipus d'objecte al qual es fa referència (no el tipus de variable de referència) el que determina quina versió d'un mètode anul·lat s'executarà.

Exemple:








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

>

>

Sortida:

 Inside Parent Inside Child>

Anulació del mètode amb herència múltiple i multinivell

  1. Herència múltiple: Quan una classe es deriva de més d'una classe base s'anomena herència múltiple.

    Exemple: Considerem un exemple en què volem substituir un mètode d'una sola classe pare. A continuació es mostra la implementació.

    cadena a la data




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

    >

    >

    Sortida:

     Inside Child Inside Parent2>
    Herència multinivell: quan tenim una relació fill-nét.

    Exemple: Considerem un exemple en què volem substituir només un mètode d'una de les seves classes pare. A continuació es mostra la implementació.




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

    >

    >

    Sortida:

     Inside GrandChild Inside Parent>

Crida al mètode Parent dins del mètode anul·lat

Els mètodes de classe pare també es poden cridar dins dels mètodes anul·lats. Això es pot aconseguir generalment de dues maneres.

    Ús del nom de classe: els mètodes de classe dels pares es poden cridar mitjançant el Parentclassname.method>dins del mètode anul·lat.

    Exemple:




    funció de crida javascript des d'html

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

    >

    >

    Sortida:

     Inside Parent Inside Child>
    Utilitzant Super(): Pythonsuper()>La funció ens proporciona la possibilitat de fer referència explícita a la classe pare. Bàsicament és útil quan hem d'anomenar funcions de superclasse. Retorna l'objecte proxy que ens permet referir la classe pare per 'super'.

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

    >

    >

    Sortida:

     Inside Parent Inside Child>

    Exemple 2:


    rekha indi



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

    >

    >

    Sortida:

     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>