Объекты Python, пригодные для перегрузки функций?

#python #python-3.x #function

#python #python-3.x #функция

Вопрос:

Я изучаю Python в последнее время (декабрь ’20) и обнаружил, что эта концепция очень запутанная. Допустим, у меня есть функция. Как я могу определить, могут ли конкретные объекты type быть применены к этому виду function overloading ?

 def compute(a, b, c):
    return (a b) * c
 

Он отлично работает с некоторыми из этих типов объектов — number, string, но не с другими.

 >>> a, b, c=1,2,3
>>> a, b, c = 'hi', 'U', 3   # okay

>>> a, b, c = [1], [2,3], 3  # okay
>>> a, b, c = {1}, {2}, 3    # it's set()
 

Комментарии:

1. Это связано с тем, что для строк и матриц могут выполняться математические вычисления. "string" * 3 = "stringstringstring" однако там, где вы использовали {} скобку Керли. С ними не может быть выполнена математика

2. @Evorage это слишком широкое утверждение. {1} - {2} является законным. Проблема в том, что наборы не поддерживаются .

3. Это не перегрузка функций, в python нет перегрузки функций. Python — это язык с динамической типизацией, и это решается во время выполнения при вызове функции. Чтобы узнать, какие входные данные ожидает функция, вы должны прочитать документацию

Ответ №1:

В качестве примера, тип данных должен реализовывать метод __add__() (magic / special /»dunder») для осмысленного использования оператора. В ваших примерах он определен для целых чисел, строк и списков, но не для наборов.

Модель данных Python является справочным документом, если вы хотите узнать больше об этой теме, но в качестве отправной точки вы можете найти эту статью полезной.

Комментарии:

1. Спасибо за указатели! Прочитает и погрузится… Ценю это. Извините, что я пока не могу проголосовать…

Ответ №2:

Если вы хотите знать, перегружен ли конкретный объект, скажем x , оператор, или то, что мы называем магическим методом в Python, вы можете проверить:

 hasattr(x, '__add__')  # for   and similarly for any other.
 

Конечно, вы можете определить один такой метод для нужного вам класса, если он не существует.