Форум сайта python.su
Во многих сравнениях этих языков пишеться что ruby более ОО язык, и то что в python`е НЕ все есть объект в отличии от ruby. Я напиример этого не вижу (разве что в версиях < 2.2)
Возможно сравнивали со старыми версиями питона?
Понимаю что задавать такие вопросы на форуме по python`у, по меньшей мере странно, оправдаюсь тем что после поиска русскоязычных форумов по ruby, я нашел целый один форум да и то там основном про рельсы.
Офлайн
В Питоне все - объект. PyObject *.
По моему, разница не в этом.
В Питоне есть mutable и immutable объекты. list и string, например - очевидно.
А еще есть mutable и immutable классы. Тот же класс str неизменяем. На лету можно выполнить настройку только его потомка, а не его самого.
Далее. Я в Руби - далеко не спец. Так, смотрел кое что… И мастера, меня, возможно заплюют.
Буду говорить о Питоне.
У Питона есть довольно жесткие требования на работу с модулями. А именно - на мезанизм их загрузки.
Во первых, все попадает в sys.modules. Во вторых, для управления загрузкой можно использовать import hooks. В третьих, перезагрузка модулей очень опасное дело, не подкрепленное как следует языком.
import hooks постоянно развиваются, но развитие касается runtime и никак не отражается в языке. Посему - использовать можно, но несколько неочевидно. Для понимания. В общем - модуль, конечно, объект, но очень специфичный.
Еще одна больная тема - метаклассы. Сейчас они выглядят вставленными через задний проход (извините). Но при том дают большУю мощь. Я сам использую их регулярно. Но тема явно не проработана. В Python 3000 будет реализован новый подход, куда более стройный.
Может быть, я многое упустил.
Слышал, что на Руби модули и метаклассы гораздо элегантней.
Доказывать или опровергать - не возьмусь.
Надеюсь, найдутся люди, которые смогут просветить по данным вопросам.
С удовольствием почитаю дальнейшее обсуждение.
Офлайн
Самый распространенный пример, который вечно тычут рубисты в лицо питонистам, что в руби для получения длины объекта они вызывают метод obj.len(), в то время как питонисты вызывают функцию len(obj). Короче для них вся разница в плюшках. Меня это абсолютно никак не ущемляет, потому что питон – мультипарадигменный язык, и насильно пользовать объектную парадигму никто не заставляет. Я на нем начинал писать так, как я пишу на Си. Естественно, это было неоптимально, но программы работали.
Офлайн
Я плюшки и упоминать не хотел. В силу того, что у меня они вызывают только очередную порцию смеха.
obj.len() vs len(obj) ? Да в Яве нет такого понятия - свободная функция. И что, Ява более ООП язык? Фигушки, как раз наооборот. Pythonic программы на Яве не воспроизводятся. Обратное - легко, хоть и зачастую неэлегантно.
Вспомните хотя бы избитый пример с unittest и тем же nose.
Офлайн
Вспомните хотя бы избитый пример с unittest и тем же nose.Эээм. А про что там? Что unittest нужно API, а nose – нет?
Офлайн
Чуть-чуть API и для nose не помешает. Нужно хотя бы знать, как что обзывать :)
То, что nose - pythonic, а unittest совсем нет.
Соответственно они сильно отличаются по простоте написания и прочтения тестов.
Хотя unittest - стандарт. И это его большая заслуга.
Офлайн
bialixЕсли использование функций идет в конфликт с религиозными убеждениями программиста :)), можно использовать метод obj.__len__(), который все равно вызывается при вызове функции len( obj ).
в руби для получения длины объекта они вызывают метод obj.len(), в то время как питонисты вызывают функцию len(obj)
Отредактировано (Авг. 16, 2007 13:31:00)
Офлайн
ClericРубисты часто еще вспоминают, что в руби есть приватные/публичные методы, и в руби не нужно повсеместно использовать self.
Во многих сравнениях этих языков пишеться что ruby более ОО язык, и то что в python`е НЕ все есть объект в отличии от ruby. Я напиример этого не вижу (разве что в версиях < 2.2)
Возможно сравнивали со старыми версиями питона?
Понимаю что задавать такие вопросы на форуме по python`у, по меньшей мере странно, оправдаюсь тем что после поиска русскоязычных форумов по ruby, я нашел целый один форум да и то там основном про рельсы.
Отредактировано (Авг. 17, 2007 02:14:10)
Офлайн
Андрей СветловВ том то и дело что существует некоторые различия встроенных типов (классовых объектов) и классов определенных средствами языка. В версиях ниже 2.2 разница была более явной, там нельзя было отнаследоватся от встроенных типов. В помощь питонистам того времени в std библиотеку внесли костыли UserDict, UserList… Слава богу ситуация поменялась.
В Питоне все - объект. PyObject *.
attr_accessor :firstname # read-write
attr_reader :lastname # readonly
attr_writter age # writeonly
Отредактировано (Авг. 17, 2007 03:57:50)
Офлайн
не про ООП, но про руби=)
http://smyck.de/2007/08/15/ruby-faster-than-python-and-perl/#comment-10064
читаем статью, потом смотрим реальные цифры в комментах)
Офлайн