Comment l'héritage multiple travailler avec le super() et __init__() arguments?

Je suis juste de plonger dans certains plus avancés python sujets (bien, avancé pour moi au moins). Je suis en train de lire à propos de l'héritage multiple et comment vous pouvez les utiliser à super(). J'ai plus ou moins comprendre le fonctionnement de la super fonction est utilisée, mais (1) Quel est le problème avec le faire juste comme ça?:

class First(object):
    def __init__(self):
        print "first"

class Second(object):
    def __init__(self):
        print "second"

class Third(First, Second):
    def __init__(self):
        First.__init__(self)
        Second.__init__(self)
        print "that's it"

À super(), Andrew Kuchlings papier sur Python Verrues dit:

utilisation de super() sera aussi correct lorsque la classe Dérivée hérite
à partir de plusieurs classes de base et tous ou certains d'entre eux ont init
méthodes

J'ai donc réécrit l'exemple ci-dessus comme suit:

class First(object):
    def __init__(self):
        print "first"

class Second(object):
    def __init__(self):
        print "second"

class Third(First, Second):
    def __init__(self):
        super(Third, self).__init__(self)
        print "that's it"

Cela, cependant, ne fonctionne que le premier init il peut trouver, ce qui est en First. (2) Peut super() être utilisé pour exécuter l'initialisation de First et Second, et si oui, comment? L'exécution de super(Third, self).__init__(self) deux fois exécuté en Premier.init() deux fois..

D'ajouter un peu plus de confusion. Que faire si le héritées des classes init() les fonctions de différents arguments. Par exemple, si j'avais quelque chose comme cela:

class First(object):
    def __init__(self, x):
        print "first"

class Second(object):
    def __init__(self, y, z):
        print "second"

class Third(First, Second):
    def __init__(self, x, y, z):
        First.__init__(self, x)
        Second.__init__(self, y, z)
        print "that's it"

(3) Comment pourrais-je être en mesure de fournir les arguments pertinents pour les différentes héritées des classes de fonctions d'initialisation à l'aide de super()?

Tous les conseils sont les bienvenus!

ps. Depuis que j'ai plusieurs questions, je les ai mis en gras et numéroté..

  • super(Class, self) retourne un objet, de sorte que vous ne devriez pas appeler avec .__init__(self), mais juste .__init__(). Vous pouvez les voir dans les réponses, mais l'original de votre premier code renvoie l'exception TypeError: __init__() takes exactly 1 argument (2 given).
InformationsquelleAutor kramer65 | 2013-05-31