Как Ruby более объектно-ориентирован, чем Python? - PullRequest
22 голосов
/ 08 сентября 2010

Матц, который изобрел Ruby, сказал, что он разработал язык как более объектно-ориентированный, чем Python. Как Ruby более объектно-ориентирован, чем Python?

Ответы [ 4 ]

22 голосов
/ 08 сентября 2010

Если вы возьмете Python 1993 года и сравните его с Ruby, то последний будет более объектно-ориентированным.Однако после капитального ремонта в Python 2.2 это уже не так.Я бы сказал, что современный Python настолько объектно-ориентирован, насколько это возможно.

15 голосов
/ 08 сентября 2010

Один пример, который обычно приводится, это len, который в Python является встроенной функцией. Вы можете реализовать специальный метод __len__ в ваших объектах, который будет вызываться len, но len все еще является функцией. В Ruby объекты просто имеют свойство / метод .length, поэтому он выглядит более объектно-ориентированным, когда вы говорите obj.length, а не len(obj), хотя в глубине души происходит почти то же самое.

Тем не менее, за эти годы Python продвинулся к большей объектной ориентации. В настоящее время все объекты (и неявно определенные пользователем объекты) наследуются от класса object. Также были добавлены метаклассы, и многие из встроенных и базовых классов библиотеки были организованы в иерархии с помощью ABC (абстрактных базовых классов).

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

9 голосов
/ 08 сентября 2010

С WikiVS ,

… где в Ruby все функции и большинство операторов фактически являются методами объекта, ряд функций Python являются процедурными функциями, а не методами.

Следующее интервью с Матцем, создателем Ruby, предоставляет дополнительный контекст для вашего вопроса и пункта выше.

Стюарт : Начнем с небольшой истории.Почему вы решили написать Ruby?

Matz : В 1993 году я разговаривал с коллегой по языкам сценариев.Я был очень впечатлен их силой и их возможностями.Я чувствовал, что сценарии - это путь.

Как давний поклонник объектно-ориентированного программирования, мне казалось, что ОО-программирование очень подходит и для сценариев.Затем я посмотрел вокруг сети.Я обнаружил, что Perl 5, который еще не был выпущен, собирался реализовать функции OO, но это не совсем то, что я хотел.Я отказался от Perl как от объектно-ориентированного языка сценариев.

Затем я наткнулся на Python.Это был интерпретирующий, объектно-ориентированный язык.Но я не чувствовал, что это был язык сценариев.Кроме того, это был гибридный язык процедурного и объектно-ориентированного программирования.

Я хотел создать язык сценариев, который был бы более мощным, чем Perl, и более объектно-ориентированным, чем Python .Вот почему я решил создать свой собственный язык.

0 голосов
/ 08 сентября 2010

Все просто, почти все в Ruby (включая числа) является объектом;нет скалярных значений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...