Давно хотел поинтересоваться. Много слышал, что в питоне все методы лексически связаны с объектами, в которых они определены. Сейчас в JS введены функции, которые имеют такие же ограничения, поэтому, это можно проиллюстрировать таким вот кодом
Object.prototype.foo = () => console.log(this.a)
o = {a: 1}
o.foo() // undefined
Мне не совсем понятно, как же в питоне тогда организуется наследование делегированием, если там нет динамического связывания? Как строятся сабклассы? Что, все копируется чтоли? Каждый сабкласс содержит в себе все экземпляры предков?
Питон же называют «динамическим» языком обычно. В каком смысле тут употребляется слово динамический? Получается, что не в том смысле, что в нем есть динамическая диспетчеризация, а в том смысле, что там динамическая типизация? Это же, по сути подмена понятий, не? Все смешалось в одну кучу.
И еще вопрос. Как при такой модели питону удается избежать оверхеда по памяти? По идее, он же должен отжирать не меньше Java или Хаскеля при такой модели? Или есть какие-то секреты? Как там все работает изнутри?