logo

Python | Перевантаження методу

Перевантаження методу:

спробуйте блок catch у java

Два або більше методів мають однакові назви, але різну кількість параметрів або різні типи параметрів, або обидва. Ці методи називаються перевантаженими методами, а цей — методом перевантаження .

Як і інші мови (наприклад, перевантаження методів у C++ ) do, python не підтримує перевантаження методів за умовчанням. Але є різні способи досягти перевантаження методів у Python.



Проблема з перевантаженням методів у Python полягає в тому, що ми можемо перевантажувати методи, але можемо використовувати лише останній визначений метод.

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

>

>

Вихід

100>

У наведеному вище коді ми визначили два методи продукту, ми можемо використовувати лише другий метод продукту, оскільки python не підтримує перевантаження методів. Ми можемо визначити багато методів з однаковою назвою та різними аргументами, але ми можемо використовувати лише останній визначений метод. Виклик іншого методу призведе до помилки. Як тут телефонують продукт(4,5) призведе до помилки, оскільки останній визначений метод продукту приймає три аргументи.

Таким чином, щоб подолати вищезазначену проблему, ми можемо використовувати різні способи досягнення перевантаження методу.

Спосіб 1 (не найефективніший метод):

Ми можемо використовувати аргументи, щоб змусити ту саму функцію працювати по-різному, тобто відповідно до аргументів.

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

>

>

Вихід

11 Hi Geeks>

Спосіб 2 (не ефективний):

Ми можемо досягти перевантаження методів у python за допомогою визначеної користувачем функції Жодного ключове слово як параметр за замовчуванням.

Пояснення коду:

Для першого параметра методу add встановлено значення None. Це дасть нам можливість викликати його з параметром або без нього.

Коли ми передаємо аргументи методу add (працює):

  • Метод перевіряє, чи обидва параметри доступні чи ні.
  • Оскільки ми вже вказали значення параметра за замовчуванням як «Немає», якщо будь-яке значення не передано, воно залишиться «Немає».
  • Використовуючи оператори If-Else, ми можемо досягти перевантаження методу, перевіряючи кожен параметр як один оператор.

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

>

>

Вихід

5 2>

Проблема з наведеними вище методами полягає в тому, що вони ускладнюють код із кількома операторами if/else і не є бажаним способом досягнення перевантаження методу.

Спосіб 3 (ефективний):

За допомогою Multiple Dispatch Decorator

Multiple Dispatch Decorator Можна встановити:

pip3 install multipledispatch>

Якщо pip не встановлено на вашому пристрої:

Натисніть тут для Windows

Натисніть тут для 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>

>

>

Вихід:

6 12 17.985999999999997>

У Backend Dispatcher створює об’єкт, який зберігає різні реалізації, і під час виконання вибирає відповідний метод як тип і кількість переданих параметрів.