Почему Python использует встроенные модули вместо методов объекта (например, ruby и т. Д.)? [Дубликат]

1

Возможный дубликат:
Почему python использует "магические методы" ?

Просто хочу уточнить, это НЕ питон против рубина. Я был пользователем python в течение ~ 1 года. Мне это очень нравится, за исключением некоторых фанки-встроенных vs с методами. Например, почему вам нужно делать len (listA) вместо listA.length() или listA.size(), например ruby ​​или Java. На моем фоне Java кажется достаточно интуитивным, чтобы иметь listA.length() вместо len (легко в идее и т.д., Чтобы узнать методы, которые объект имеет, а не изучать встроенные модули). Может ли кто-нибудь объяснить эту причину этого выбора?

  • 0
    это, вероятно, остаток от унаследованного кода. Вероятно, они должны реализовать listA.length() и через несколько лет отказаться от len(listA) а через несколько лет удалить len . Но это грубый процесс.
Теги:

1 ответ

1

В основном из-за истории. Предки Python были языком обучения ABC, который, как я понял, несколько BASIC-like.

Лично я считаю, что приятно знать, что я всегда могу получить длину чего-то с len(thing), не зная, что реализатор определенного типа назвал их эквивалентным методом: len()? length()? getLength()? Вы можете иметь все соглашения, которые вам нравятся, но когда встроенная функция len() разбивается на ваш объект, потому что вы не реализовали __len__(), вы можете быть уверены, что каждый будет называть их метод длины __len__().

Ваша точка зрения о методах автозаполнения IDE применяется только в том случае, если IDE знает, к какому типу объекта привязывается данное имя, что не всегда возможно на динамическом языке, таком как Python. По крайней мере, не без выполнения кода.

Кстати, некоторые из ваших встроенных функций (например, str(), int() и float()) не являются функциями, а типами. (Другими словами, str(42) является строковой конструкцией, а не вызовом функции, которая возвращает строку.) Они отлично скрещиваются, даже если вы являетесь разработчиком OO.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню