Metodeoverbelastning:
df loc
To eller flere metoder har samme navn, men forskjellige antall parametere eller forskjellige typer parametere, eller begge deler. Disse metodene kalles overbelastede metoder og dette kalles metode overbelastning .
Som andre språk (f.eks. metodeoverbelastning i C++ ) gjør, støtter ikke python metodeoverbelastning som standard. Men det er forskjellige måter å oppnå metodeoverbelastning i Python.
Problemet med metodeoverbelastning i Python er at vi kan overbelaste metodene, men kan bare bruke den siste definerte metoden.
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>)> |
>
>Produksjon
100>
I koden ovenfor har vi definert to produktmetoder vi kan bare bruke den andre produktmetoden, da python ikke støtter metodeoverbelastning. Vi kan definere mange metoder med samme navn og forskjellige argumenter, men vi kan bare bruke den sist definerte metoden. Å kalle den andre metoden vil produsere en feil. Som her ringer produkt(4,5) vil produsere en feil ettersom den sist definerte produktmetoden tar tre argumenter.
For å overvinne problemet ovenfor kan vi bruke forskjellige måter for å oppnå metodeoverbelastningen.
Metode 1 (ikke den mest effektive metoden):
Vi kan bruke argumentene for å få den samme funksjonen til å fungere annerledes, dvs. i henhold til argumentene.
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'>)> |
>
>Produksjon
11 Hi Geeks>
Metode 2 (ikke den effektive):
Vi kan oppnå metodeoverbelastning i python ved hjelp av brukerdefinert funksjon Ingen nøkkelord som standardparameter.
Kodeforklaring:
Den første parameteren for add-metoden er satt til Ingen. Dette vil gi oss muligheten til å kalle den med eller uten en parameter.
Når vi sender argumenter til add-metoden (fungerer):
- Metoden sjekker om begge parameterne er tilgjengelige eller ikke.
- Ettersom vi allerede har gitt standard parameterverdier som Ingen, vil hvis noen av verdiene ikke passeres, forbli Ingen.
- Ved å bruke If-Else-setninger kan vi oppnå metodeoverbelastning ved å sjekke hver parameter som enkeltsetning.
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>)> |
>
>Produksjon
5 2>
Problemet med metodene ovenfor er at det gjør koden mer kompleks med flere if/else-setninger og er ikke den ønskede måten å oppnå metodeoverbelastning på.
Metode 3 (effektiv en):
Ved å bruke Multiple Dispatch Decorator
Multiple Dispatch Decorator Kan installeres av:
pip3 install multipledispatch>
Hvis pip ikke er installert på enheten din:
Klikk her for Linux
Python3
len of array i java
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> |
>
>
Produksjon:
6 12 17.985999999999997>
I Backend oppretter Dispatcher et objekt som lagrer forskjellig implementering og på kjøretid velger den riktig metode som type og antall parametere som sendes.