logo

Python | Preobremenitev metode

Preobremenitev metode:

kako brati iz datoteke csv v javi

Dve ali več metod imata isto ime, vendar različno število parametrov ali različne vrste parametrov ali oboje. Te metode se imenujejo preobremenjene metode, to pa se imenuje metoda preobremenitev .



Tako kot drugi jeziki (npr. preobremenitev metode v C++ ) do, python privzeto ne podpira preobremenitve metod. Vendar obstajajo različni načini za doseganje preobremenitve metod v Pythonu.

Težava s preobremenitvijo metod v Pythonu je, da lahko preobremenimo metode, vendar lahko uporabimo samo najnovejšo definirano metodo.

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

>

>

Izhod

100>

V zgornji kodi smo definirali dve metodi izdelka, uporabimo lahko le drugo metodo izdelka, saj python ne podpira preobremenitve metod. Definiramo lahko veliko metod z istim imenom in različnimi argumenti, vendar lahko uporabimo samo zadnjo definirano metodo. Klicanje druge metode bo povzročilo napako. Kot tukaj kliče izdelek(4,5) bo povzročila napako, saj zadnja definirana metoda produkta sprejme tri argumente.

Tako lahko za premagovanje zgornje težave uporabimo različne načine za doseganje preobremenitve metode.

Metoda 1 (ni najučinkovitejša metoda):

Z argumenti lahko naredimo, da ista funkcija deluje drugače, tj. glede na argumente.

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

>

>

Izhod

11 Hi Geeks>

Metoda 2 (ni učinkovita):

Preobremenitev metode v pythonu lahko dosežemo z uporabo uporabniško definirane funkcije Noben ključna beseda kot privzeti parameter.

Razlaga kode:

Prvi parameter metode dodajanja je nastavljen na Brez. To nam bo dalo možnost, da ga pokličemo s parametrom ali brez njega.

Ko posredujemo argumente metodi add (deluje):

  • Metoda preveri, ali sta oba parametra na voljo ali ne.
  • Ker smo že podali privzete vrednosti parametrov kot None, bo ostala None, če katera od vrednosti ni posredovana.
  • Z uporabo stavkov If-Else lahko dosežemo preobremenitev metode s preverjanjem vsakega parametra kot posameznega stavka.

Python3

razvrščen arraylist v Javi




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

>

>

Izhod

5 2>

Težava z zgornjimi metodami je, da naredi kodo bolj zapleteno z več stavki if/else in ni želen način za doseganje preobremenitve metode.

Metoda 3 (učinkovita):

Z uporabo Multiple Dispatch Decorator

Multiple Dispatch Decorator lahko namesti:

pip3 install multipledispatch>

Če pip ni nameščen v vaši napravi:

Kliknite tukaj za Windows

Kliknite tukaj za 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>

>

>

Izhod:

6 12 17.985999999999997>

V ozadju Dispatcher ustvari objekt, ki shrani različne izvedbe in med izvajanjem izbere ustrezno metodo glede na vrsto in število posredovanih parametrov.