Как Ruby более объектно-ориентированный, чем Python?
Ответ 1
Если вы берете Python с 1993 года и сравниваете его с Ruby, то последний более объектно ориентирован. Однако после капитальный ремонт в Python 2.2 это уже не так. Я бы сказал, что современный Python является объектно-ориентированным, как он получает.
Ответ 2
Одним из примеров, который обычно используется, является len
, который в Python является встроенной функцией. Вы можете реализовать специальный __len__
метод в своих объектах, который будет вызываться len
, но len
по-прежнему является функцией. В Ruby объекты имеют свойство .length
свойство/метод, поэтому он выглядит более объектно ориентированным, если вы говорите obj.length
, а не len(obj)
, хотя глубоко под капотом происходит почти то же самое.
Тем не менее, на протяжении многих лет Python перешел к большей объектной ориентации. В настоящее время все объекты (и неявно определяемые пользователем объекты) наследуются от класса object
. Также добавлены метаклассы, и многие из встроенных и основных классов библиотеки были организованы в иерархии с помощью ABC (абстрактные базовые классы).
В моем тяжелом использовании Python я никогда не находил его недостающим в отделе OO. Он может делать все, что я хочу, чтобы делать с объектами. Правда, Ruby чувствует себя несколько более чисто OO, но, по крайней мере, по моему опыту это не было действительно практической проблемой.
Ответ 3
От WikiVS,
& hellip; где в Ruby все функции и большинство операторов на самом деле являются методами объекта, ряд функций Python - это процедурные функции, а не методы.
Следующее интервью с создателем Ruby от Matz предоставляет дополнительный контекст для вашего вопроса и выше.
& hellip;
Стюарт: начнем с небольшой истории. Почему вы решили написать Ruby?
Matz. Еще в 1993 году я разговаривал с коллегой по поводу языков сценариев. Меня поразила их сила и возможности. Я чувствовал, что скрипты - это путь.
В качестве долговременного объектно-ориентированного программирования мне показалось, что программирование OO очень подходит для сценариев. Затем я осмотрел Сеть. Я обнаружил, что Perl 5, который еще не выпустил, собирался реализовать функции OO, но это было не совсем то, что я хотел. Я отказался от Perl как объектно-ориентированного языка сценариев.
Затем я наткнулся на Python. Это был интерпретирующий, объектно-ориентированный язык. Но я не чувствовал, что это "скриптовый" язык. Кроме того, это был гибридный язык процедурного программирования и объектно-ориентированного программирования.
Мне нужен язык сценариев, который был более мощным, чем Perl, и более объектно-ориентированным, чем Python. Вот почему я решил создать свой собственный язык.
& hellip;
Ответ 4
Это простой, почти все в Ruby (включая числа) - это объект; нет скалярных значений.