Como o “super” do Python faz a coisa certa?

Estou executando o Python 2.5, portanto, essa pergunta pode não se aplicar ao Python 3. Quando você cria uma hierarquia de classe diamante usando herança múltipla e cria um objeto da classe mais derivada, o Python faz a coisa certa (TM). Ele chama o construtor para a classe mais derivada, depois para as classes pai listadas da esquerda para a direita e depois para os avós. Eu estou familiarizado com o Python MRO; essa não é a minha pergunta. Estou curioso para saber como o objeto retornado de super consegue se comunicar com as chamadas de super nas classes pai na ordem correta. Considere este código de exemplo:

#!/usr/bin/python

class A(object):
    def __init__(self): print "A init"

class B(A):
    def __init__(self):
        print "B init"
        super(B, self).__init__()

class C(A):
    def __init__(self):
        print "C init"
        super(C, self).__init__()

class D(B, C):
    def __init__(self):
        print "D init"
        super(D, self).__init__()

x = D()

O código faz a coisa intuitiva, imprime:

D init
B init
C init
A init

No entanto, se você comentar a chamada para super na função init de B, nem a função init de A nem C será chamada. Isso significa que a chamada de B para super está de alguma forma ciente da existência de C na hierarquia geral de classes. Eu sei que super retorna um objeto proxy com um operador get sobrecarregado, mas como o objeto retornado por super na definição init de D comunica a existência de C ao objeto retornado por super na definição init de B? As informações que as chamadas subseqüentes de superutilização armazenam no próprio objeto? Em caso afirmativo, por que não é super self.super?

Edit: Jekke apontou com razão que não é self.super porque super é um atributo da classe, não uma instância da classe. Conceitualmente, isso faz sentido, mas, na prática, super também não é um atributo da classe! Você pode testar isso no intérprete criando duas classes A e B, onde B herda de A e chamandodir(B). Não temsuper ou__super__ atributos

questionAnswers(5)

yourAnswerToTheQuestion