Основное различие заключается в том, правильно ли определен оператор +
для этого типа данных. Если мы рассмотрим тип str
, то имеет смысл реализовать сложение для строк таким образом, чтобы добавление какого-либо другого типа данных имело эффект добавления его в виде строки. Чтобы показать, как может выглядеть чрезмерно упрощенный код для этого, можно сказать
class str:
def __add__(self, num: int) -> str:
return self + str(num)
, что имеет смысл. Теперь, если мы рассмотрим, как сложение может выглядеть для целого числа, то гораздо меньше смысла думать о добавлении строки. Численно, если у нас есть число 5
, а затем ваш учитель математики сказал: «Хорошо, класс, теперь добавьте слово« foobar »к числу 5», вы не будете знать, что делать. По сути, это идея перегрузки операторов в языке программирования; на самом деле, проблема, которую вы здесь изложили, является одной из самых распространенных жалоб на язык Javascript, потому что люди не учитывают логические значения c, стоящие за реализацией арифметических c операторов для разных типов данных.
edit: мне было указано, что python даже не позволяет добавлять int
s к str
s, поэтому моя точка зрения для Python немного не совпадает; Тем не менее, я надеюсь, что понятие остается для объектно-ориентированных языков в целом.