Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 15, 2007 01:59:03

Cleric
От:
Зарегистрирован: 2007-06-26
Сообщения: 87
Репутация: +  0  -
Профиль   Отправить e-mail  

Чем ruby более ОО язык чем python?

Во многих сравнениях этих языков пишеться что ruby более ОО язык, и то что в python`е НЕ все есть объект в отличии от ruby. Я напиример этого не вижу (разве что в версиях < 2.2)
Возможно сравнивали со старыми версиями питона?


Понимаю что задавать такие вопросы на форуме по python`у, по меньшей мере странно, оправдаюсь тем что после поиска русскоязычных форумов по ruby, я нашел целый один форум да и то там основном про рельсы.



Офлайн

#2 Авг. 15, 2007 02:42:14

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Чем ruby более ОО язык чем python?

В Питоне все - объект. PyObject *.
По моему, разница не в этом.
В Питоне есть mutable и immutable объекты. list и string, например - очевидно.
А еще есть mutable и immutable классы. Тот же класс str неизменяем. На лету можно выполнить настройку только его потомка, а не его самого.
Далее. Я в Руби - далеко не спец. Так, смотрел кое что… И мастера, меня, возможно заплюют.
Буду говорить о Питоне.
У Питона есть довольно жесткие требования на работу с модулями. А именно - на мезанизм их загрузки.
Во первых, все попадает в sys.modules. Во вторых, для управления загрузкой можно использовать import hooks. В третьих, перезагрузка модулей очень опасное дело, не подкрепленное как следует языком.
import hooks постоянно развиваются, но развитие касается runtime и никак не отражается в языке. Посему - использовать можно, но несколько неочевидно. Для понимания. В общем - модуль, конечно, объект, но очень специфичный.
Еще одна больная тема - метаклассы. Сейчас они выглядят вставленными через задний проход (извините). Но при том дают большУю мощь. Я сам использую их регулярно. Но тема явно не проработана. В Python 3000 будет реализован новый подход, куда более стройный.
Может быть, я многое упустил.
Слышал, что на Руби модули и метаклассы гораздо элегантней.
Доказывать или опровергать - не возьмусь.
Надеюсь, найдутся люди, которые смогут просветить по данным вопросам.
С удовольствием почитаю дальнейшее обсуждение.



Офлайн

#3 Авг. 15, 2007 08:56:09

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

Чем ruby более ОО язык чем python?

Самый распространенный пример, который вечно тычут рубисты в лицо питонистам, что в руби для получения длины объекта они вызывают метод obj.len(), в то время как питонисты вызывают функцию len(obj). Короче для них вся разница в плюшках. Меня это абсолютно никак не ущемляет, потому что питон – мультипарадигменный язык, и насильно пользовать объектную парадигму никто не заставляет. Я на нем начинал писать так, как я пишу на Си. Естественно, это было неоптимально, но программы работали.



Офлайн

#4 Авг. 15, 2007 12:51:49

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Чем ruby более ОО язык чем python?

Я плюшки и упоминать не хотел. В силу того, что у меня они вызывают только очередную порцию смеха.
obj.len() vs len(obj) ? Да в Яве нет такого понятия - свободная функция. И что, Ява более ООП язык? Фигушки, как раз наооборот. Pythonic программы на Яве не воспроизводятся. Обратное - легко, хоть и зачастую неэлегантно.

Вспомните хотя бы избитый пример с unittest и тем же nose.



Офлайн

#5 Авг. 15, 2007 17:25:41

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

Чем ruby более ОО язык чем python?

Вспомните хотя бы избитый пример с unittest и тем же nose.
Эээм. А про что там? Что unittest нужно API, а nose – нет?



Офлайн

#6 Авг. 15, 2007 17:35:40

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Чем ruby более ОО язык чем python?

Чуть-чуть API и для nose не помешает. Нужно хотя бы знать, как что обзывать :)
То, что nose - pythonic, а unittest совсем нет.
Соответственно они сильно отличаются по простоте написания и прочтения тестов.
Хотя unittest - стандарт. И это его большая заслуга.



Офлайн

#7 Авг. 16, 2007 13:28:16

ZAN
От:
Зарегистрирован: 2007-06-10
Сообщения: 403
Репутация: +  10  -
Профиль   Отправить e-mail  

Чем ruby более ОО язык чем python?

bialix
в руби для получения длины объекта они вызывают метод obj.len(), в то время как питонисты вызывают функцию len(obj)
Если использование функций идет в конфликт с религиозными убеждениями программиста :)), можно использовать метод obj.__len__(), который все равно вызывается при вызове функции len( obj ).



Отредактировано (Авг. 16, 2007 13:31:00)

Офлайн

#8 Авг. 16, 2007 17:29:40

nss
От:
Зарегистрирован: 2007-01-06
Сообщения: 103
Репутация: +  0  -
Профиль   Отправить e-mail  

Чем ruby более ОО язык чем python?

Cleric
Во многих сравнениях этих языков пишеться что ruby более ОО язык, и то что в python`е НЕ все есть объект в отличии от ruby. Я напиример этого не вижу (разве что в версиях < 2.2)
Возможно сравнивали со старыми версиями питона?


Понимаю что задавать такие вопросы на форуме по python`у, по меньшей мере странно, оправдаюсь тем что после поиска русскоязычных форумов по ruby, я нашел целый один форум да и то там основном про рельсы.
Рубисты часто еще вспоминают, что в руби есть приватные/публичные методы, и в руби не нужно повсеместно использовать self.

http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/to-ruby-from-python/



Отредактировано (Авг. 17, 2007 02:14:10)

Офлайн

#9 Авг. 17, 2007 02:47:50

Cleric
От:
Зарегистрирован: 2007-06-26
Сообщения: 87
Репутация: +  0  -
Профиль   Отправить e-mail  

Чем ruby более ОО язык чем python?

Андрей Светлов
В Питоне все - объект. PyObject *.
В том то и дело что существует некоторые различия встроенных типов (классовых объектов) и классов определенных средствами языка. В версиях ниже 2.2 разница была более явной, там нельзя было отнаследоватся от встроенных типов. В помощь питонистам того времени в std библиотеку внесли костыли UserDict, UserList… Слава богу ситуация поменялась.

Насколько я понимаю рубистов, в руби нет таких различий, например к любому объекту (будь то String или VasyaSuperClass) можно приписывать/удалять методы, в общем там для программиста нет разницы встроенный класс или свой.

Вот что пишут в вики:

Невозможность модификации встроенных классов

По сравнению с Ruby и некоторыми другими языками в Python отсутствует возможность модифицировать встроенные классы, такие как int, str, float, list и другие, что однако позволяет Python потреблять меньше оперативной памяти и быстрее работать. Дополнительной причиной, проводящей к этому ограничению, является невозможность согласовать такое поведение с модулями расширений. Многие модули используют для ускорения преобразование Python объектов, например int или str, к соответствующим C типам , вместо манипуляций с ними посредством C API.


Плюс ко всему все атрибуты изначально являються закрытыми и насколько я понимаю доступ к ним невозможен, для того чтобы сделать паблик атрибут нужно еще писать getter и setter или делать вот так:
attr_accessor :firstname  # read-write
attr_reader :lastname # readonly
attr_writter age # writeonly
В общем лучшая инкапсуляция
(Это точно не python-way, и слава богу)



Отредактировано (Авг. 17, 2007 03:57:50)

Офлайн

#10 Авг. 17, 2007 12:00:56

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2250
Репутация: +  40  -
Профиль   Отправить e-mail  

Чем ruby более ОО язык чем python?

не про ООП, но про руби=)
http://smyck.de/2007/08/15/ruby-faster-than-python-and-perl/#comment-10064
читаем статью, потом смотрим реальные цифры в комментах)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version