LINUX.ORG.RU

Вопрос по наследованию в питоне

 ,


1

3

Давно хотел поинтересоваться. Много слышал, что в питоне все методы лексически связаны с объектами, в которых они определены. Сейчас в JS введены функции, которые имеют такие же ограничения, поэтому, это можно проиллюстрировать таким вот кодом

Object.prototype.foo = () => console.log(this.a)

o = {a: 1}
o.foo() // undefined

Мне не совсем понятно, как же в питоне тогда организуется наследование делегированием, если там нет динамического связывания? Как строятся сабклассы? Что, все копируется чтоли? Каждый сабкласс содержит в себе все экземпляры предков?

Питон же называют «динамическим» языком обычно. В каком смысле тут употребляется слово динамический? Получается, что не в том смысле, что в нем есть динамическая диспетчеризация, а в том смысле, что там динамическая типизация? Это же, по сути подмена понятий, не? Все смешалось в одну кучу.

И еще вопрос. Как при такой модели питону удается избежать оверхеда по памяти? По идее, он же должен отжирать не меньше Java или Хаскеля при такой модели? Или есть какие-то секреты? Как там все работает изнутри?



Последнее исправление: ymn (всего исправлений: 1)

Делегирование в Python

#coding: utf-8
class A:
    def f(self):
        print 'A : вызываем метод f'
    def g(self):
        print 'A : вызываем метод g'
class C:
    def __init__(self):
        self.A = A()
    def f(self):
        return self.A.f()
    def g(self):
        return self.A.g()
c = C()
c.f() #A: вызываем метод f
c.g() #A: вызываем метод g

https://ru.wikipedia.org/wiki/%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD_%D0%B4%D0%B5%D0%BB%D0%B5%D0%B3%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F#Python

c3po
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.