В Python, мы можем сделать:В Python, почему я могу умножить строку на число, но я не могу добавить строку и число?
'a' * 4
, чтобы получить 'AAAA'.
Мы не можем сделать:
'a' + 4
Мы должны сначала бросить 4 в строку.
Это просто произвольный выбор, чтобы перегрузить * с определением для String и Int arg и не перегружать + для String и Int?
Я пытаюсь понять, как это вписывается в Python, считающийся «сильно типизированным», если мы определяем это как язык, не выполняющий каких-либо неявных преобразований типов, например, как он не преобразует 4 в строку в приведенном выше примере. Итак, в первом примере это пример перегрузки оператора, а не неявное преобразование?
В документах я не могу найти определение mul или *, которое принимает Int и String, только форма, которая принимает 2 Ints. Как мы узнаем, какие перегруженные определения присутствуют?
Ссылка: https://docs.python.org/2/library/operator.html
'int * str' документирован [здесь] (https://docs.python.org/2/reference/expressions.html#binary-arithmetic-operations), в ссылке на язык, а не в ссылке на библиотеку. (Операция определена в терминах int и последовательности, а строки - это своего рода последовательность.) – jwodder
И вот [больше информации о последовательностях в документах библиотеки] (https://docs.python.org/2/library /stdtypes.html#typesseq), со списком операций. –
Чтобы ответить на другой вопрос, это больше связано с перегрузкой, чем определения типов. Оператор '+' перегружен для некоторых последовательностей (например, строк) для обозначения конкатенации или для списков добавления. –