Я на Ruby не программировал. Но когда изучал Smalltalk мне понравилась идея, что можно посмотреть реализацию любого класса и подправить код на лету: добавить метод, вставить breakpoint, добавить отладочный вывод.
Конечно так можно и в ногу себе выстрелить. Но в Smalltalk-е это нормальное поведение системы. Например, в стандартной поставке Squeak Smalltalk нет классов для работы с RegExp-ами. Поддержка регулярок устанавливается отдельно. И после добавления RegExp-ов в классе String появляются методы matchesRegex:, matchesRegexIgnoringCase: и другие.
Оказалось, что нет особых преград для модифицирования Python-классов на лету даже для встроенных типов.
В моей реализации метода type.__setattr__ Я как раз убрал возможность заменять уже существующие методы. Основное предназначение модуля — добавление новых атрибутов в классы. В частности можно добавить метод map и filter в классы list, tuple, dict.
Мне наоборот больше нравится подход Smalltalk-а: если вам что-то надо узнать об объекте, спросите его (вызовите метод). Вы же не используете функцию replace для замены текста в string-ах, вы используете метод replace.
Конечно так можно и в ногу себе выстрелить. Но в Smalltalk-е это нормальное поведение системы. Например, в стандартной поставке Squeak Smalltalk нет классов для работы с RegExp-ами. Поддержка регулярок устанавливается отдельно. И после добавления RegExp-ов в классе String появляются методы
matchesRegex:
,matchesRegexIgnoringCase:
и другие.Оказалось, что нет особых преград для модифицирования Python-классов на лету даже для встроенных типов.
type.__setattr__
Я как раз убрал возможность заменять уже существующие методы. Основное предназначение модуля — добавление новых атрибутов в классы. В частности можно добавить методmap
иfilter
в классыlist
,tuple
,dict
.replace
для замены текста в string-ах, вы используете методreplace
.