Андрей Светлов
В Питоне все - объект. 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, и слава богу)