#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.
Конечно, вы можете определить один такой метод для нужного вам класса, если он не существует.