Tenez compte de ceci: une base de classe A, de classe B hérite de A, de classe C hérite de B. Ce qui est une façon générique pour appeler un constructeur de la classe parent dans un constructeur? Si cela semble encore trop vague, voici un peu de code.
class A(object):
def __init__(self):
print "Constructor A was called"
class B(A):
def __init__(self):
super(B,self).__init__()
print "Constructor B was called"
class C(B):
def __init__(self):
super(C,self).__init__()
print "Constructor C was called"
c = C()
C'est la façon dont je le fais maintenant. Mais il semble encore un peu trop non générique, vous devez passer un bon type à la main.
Maintenant, j'ai essayé à l'aide d' self.__class__
comme premier argument à super(), mais, évidemment, ça ne fonctionne pas - si vous le mettez dans le constructeur de C - assez juste, B du constructeur est appelé. Si vous faites la même chose dans le cas B, le "soi" des points encore à une instance de C, donc vous vous retrouvez l'appel B du constructeur (c'est la fin d'une récursion infinie).
Il n'y a pas besoin de penser au sujet de diamant héritage pour l'instant, je suis juste intéressé par la résolution de ce problème spécifique.