Причина, по которой Python не может обнаружить этот тип ошибки, заключается в том, что Python динамически типизирован, а Java статически типизирован.
Когда вы говорите a = arr.sort
, python назначает функцию a
.Теперь вы можете сделать a()
, и он запустит arr.sort.Это абсолютно допустимая вещь в Python, и, поскольку мы заранее не сообщаем, каким должен быть a
, он не может знать, подразумевали ли вы a
как функцию или отсортированный список.... он просто верит, что вы знаете, что делаете.
С другой стороны, Java имеет статическую типизацию: вы заранее сообщаете ей, что должно быть a
.Поэтому, когда вы случайно пропускаете парены, оно говорит: «Это функция, а не список, как вы сказали, что это будет».
Если вы используете IDE, например PyCharm, он скажет вам многоследующие предупреждения:
self.function
показывает:
Кажется, что оператор не имеет никакого эффекта и может быть заменен вызовом функции, чтобы иметь эффект
но в тот момент, когда мы присваиваем его:
a = self.function
оно оказывает влияние, и это не может быть обнаружено.