Python | Methodenüberladung

Methodenüberladung:

Zwei oder mehr Methoden haben denselben Namen, aber eine unterschiedliche Anzahl von Parametern oder unterschiedliche Parametertypen oder beides. Diese Methoden werden überladene Methoden genannt und dies wird als Methode bezeichnet Überlastung .

Wie andere Sprachen (zum Beispiel Methodenüberladung in C++ ) tun, unterstützt Python standardmäßig keine Methodenüberladung. Es gibt jedoch verschiedene Möglichkeiten, eine Methodenüberladung in Python zu erreichen.

Das Problem bei der Methodenüberladung in Python besteht darin, dass wir möglicherweise die Methoden überladen, aber nur die zuletzt definierte Methode verwenden können.

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

Ausgabe

100 

Im obigen Code haben wir zwei Produktmethoden definiert. Wir können nur die zweite Produktmethode verwenden, da Python das Überladen von Methoden nicht unterstützt. Wir definieren möglicherweise viele Methoden mit demselben Namen und unterschiedlichen Argumenten, können jedoch nur die zuletzt definierte Methode verwenden. Der Aufruf der anderen Methode führt zu einem Fehler. Wie hier ein Anruf Produkt(4,5) erzeugt einen Fehler, da die zuletzt definierte Produktmethode drei Argumente benötigt.

Um das oben genannte Problem zu lösen, können wir daher verschiedene Methoden verwenden, um die Methodenüberladung zu erreichen.

Methode 1 (nicht die effizienteste Methode):

Wir können die Argumente verwenden, um dieselbe Funktion anders funktionieren zu lassen, d. h. entsprechend den Argumenten.

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

Ausgabe

11 Hi Geeks 

Methode 2 (nicht die effizienteste):

Wir können eine Methodenüberladung in Python durch die Verwendung einer benutzerdefinierten Funktion erreichen Keiner Schlüsselwort als Standardparameter.

Code-Erklärung:

Der erste Parameter der Add-Methode ist auf None gesetzt. Dies gibt uns die Möglichkeit, es mit oder ohne Parameter aufzurufen.

Wenn wir Argumente an die Add-Methode übergeben (funktioniert):

  • Die Methode prüft, ob beide Parameter verfügbar sind oder nicht.
  • Da wir bereits Standardparameterwerte als „None“ angegeben haben, bleibt einer der Werte, wenn er nicht übergeben wird, „None“.
  • Mithilfe von If-Else-Anweisungen können wir eine Methodenüberladung erreichen, indem wir jeden Parameter als einzelne Anweisung überprüfen.

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

Ausgabe

5 2 

Das Problem mit den oben genannten Methoden besteht darin, dass sie den Code mit mehreren if/else-Anweisungen komplexer machen und nicht der gewünschte Weg sind, um eine Methodenüberladung zu erreichen.

Methode 3 (effizient):

Durch die Verwendung von Multiple Dispatch Decorator

Multiple Dispatch Decorator Kann installiert werden durch:

pip3 install multipledispatch 

Wenn pip nicht auf Ihrem Gerät installiert ist:

Klicken Sie hier für Windows

Klicken Sie hier für 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>

Ausgabe:

6 12 17.985999999999997 

Im Backend erstellt der Dispatcher ein Objekt, das verschiedene Implementierungen speichert, und wählt zur Laufzeit die entsprechende Methode als Typ und Anzahl der übergebenen Parameter aus.