logo

Python | Supraîncărcarea metodei

Supraîncărcarea metodei:

elementele de bază ale seleniului

Două sau mai multe metode au același nume, dar numere diferite de parametri sau tipuri diferite de parametri, sau ambele. Aceste metode sunt numite metode supraîncărcate și aceasta se numește metodă supraîncărcare .

Ca și alte limbi (de exemplu, supraîncărcarea metodei în C++ ) face, python nu acceptă în mod implicit supraîncărcarea metodei. Dar există diferite moduri de a realiza supraîncărcarea metodei în Python.



Problema cu supraîncărcarea metodelor în Python este că putem supraîncărca metodele, dar putem folosi numai cea mai recentă metodă definită.

Python3




# First product method.> # Takes two argument and print their> # product> def> product(a, b):> >p>=> a>*> b> >print>(p)> # Second product method> # Takes three argument and print their> # product> def> product(a, b, c):> >p>=> a>*> b>*>c> >print>(p)> # Uncommenting the below line shows an error> # product(4, 5)> # This line will call the second product method> product(>4>,>5>,>5>)>

>

>

Ieșire

100>

În codul de mai sus, am definit două metode de produs, putem folosi doar a doua metodă de produs, deoarece python nu acceptă supraîncărcarea metodei. Putem defini multe metode cu același nume și argumente diferite, dar putem folosi doar cea mai recentă metodă definită. Apelarea celeilalte metode va produce o eroare. Ca aici sunând produs(4,5) va produce o eroare deoarece cea mai recentă metodă de produs definită are trei argumente.

Astfel, pentru a depăși problema de mai sus putem folosi diferite modalități de a realiza supraîncărcarea metodei.

Metoda 1 (nu cea mai eficientă metodă):

Putem folosi argumentele pentru a face ca aceeași funcție să funcționeze diferit, adică conform argumentelor.

Python3




# Function to take multiple arguments> def> add(datatype,>*>args):> ># if datatype is int> ># initialize answer as 0> >if> datatype>=>=> 'int'>:> >answer>=> 0> ># if datatype is str> ># initialize answer as ''> >if> datatype>=>=> 'str'>:> >answer>=> ''> ># Traverse through the arguments> >for> x>in> args:> ># This will do addition if the> ># arguments are int. Or concatenation> ># if the arguments are str> >answer>=> answer>+> x> >print>(answer)> # Integer> add(>'int'>,>5>,>6>)> # String> add(>'str'>,>'Hi '>,>'Geeks'>)>

>

>

Ieșire

11 Hi Geeks>

Metoda 2 (nu cea eficientă):

Putem realiza supraîncărcarea metodei în python prin utilizarea funcției definite de utilizator Nici unul cuvânt cheie ca parametru implicit.

Explicația codului:

Primul parametru al metodei de adăugare este setat la Nici unul. Acest lucru ne va oferi opțiunea de a-l apela cu sau fără parametru.

Când transmitem argumente metodei add (funcționează):

  • Metoda verifică dacă ambii parametri sunt disponibili sau nu.
  • Deoarece am dat deja valorile implicite ale parametrilor ca None, dacă oricare dintre valori nu este trecută, aceasta va rămâne None.
  • Folosind instrucțiuni If-Else, putem obține supraîncărcarea metodei prin verificarea fiecărui parametru ca o singură instrucțiune.

Python3




# code> def> add(a>=>None>, b>=>None>):> ># Checks if both parameters are available> ># if statement will be executed if only one parameter is available> >if> a !>=> None> and> b>=>=> None>:> >print>(a)> ># else will be executed if both are available and returns addition of two> >else>:> >print>(a>+>b)> # two arguments are passed, returns addition of two> add(>2>,>3>)> # only one argument is passed, returns a> add(>2>)>

>

>

Ieșire

5 2>

Problema cu metodele de mai sus este că, face codul mai complex cu mai multe instrucțiuni if/else și nu este modalitatea dorită de a obține supraîncărcarea metodei.

Metoda 3 (Una eficientă):

Folosind Multiple Dispatch Decorator

Decorator cu trimiteri multiple Poate fi instalat de:

pip3 install multipledispatch>

Dacă pip nu este instalat pe dispozitivul dvs.:

Faceți clic aici pentru Windows

Click aici pentru Linux

Python3




from> multipledispatch>import> dispatch> # passing one parameter> @dispatch>(>int>,>int>)> def> product(first, second):> >result>=> first>*>second> >print>(result)> # passing two parameters> @dispatch>(>int>,>int>,>int>)> def> product(first, second, third):> >result>=> first>*> second>*> third> >print>(result)> # you can also pass data type of any value as per requirement> @dispatch>(>float>,>float>,>float>)> def> product(first, second, third):> >result>=> first>*> second>*> third> >print>(result)> # calling product method with 2 arguments> product(>2>,>3>)># this will give output of 6> # calling product method with 3 arguments but all int> product(>2>,>3>,>2>)># this will give output of 12> # calling product method with 3 arguments but all float> product(>2.2>,>3.4>,>2.3>)># this will give output of 17.985999999999997>

>

>

gigabyte vs megaoctet

Ieșire:

6 12 17.985999999999997>

În Backend, Dispatcher creează un obiect care stochează implementări diferite, iar în timpul de execuție, selectează metoda corespunzătoare ca tipul și numărul de parametri trecuți.