Frage zu Python: Funktionen redifinieren



  • Hallo,
    ich lerne grade Python, weil Java mir zu langsam ist und C++ mir irgendwie zu frickelig war und steh grad vor einem Problem:

    # -*- coding: cp1252 -*-
    class A():
        def __init__(self):
            print "A"
        def moppelkotze(self):
            print "möp"
    class B(A):
        def __init__(self):
            A.__init__(self)
            print "B"
        def moppelkotze(self):
            print "mimimimiiiip"
    
    class C(A,B):
        def __init__(self):
            B.__init__(self)
            A.__init__(self)
            print "C"
    

    Ich frag mich aber gerade, nach welchen Kritieren er die Funktion "moppelkotze" vererbt. Im konkreten Fall gibt er grunsätzlich

    möp
    

    aber niemals

    mimimimiiiip
    

    Vielen dank im vorraus 🙂



  • Hallo,

    bei Mehrfachvererbung wird der Vererbungsbaum beginnend mit der linken Basisklasse bis zur Wurzel durchsucht (also eine Tiefen-, keine Breitensuche, auch wenn eine Breitensuche intuitiver wäre!). Und bei einer C-Instanz findet er in deinem Fall eben moppelkotze() direkt in A, schaut B also gar nicht erst an.

    (In der Realität muss er den Baum auch nicht nach oben durchlaufen, da jede Unterklasse in ihrer Datenstruktur schon alle Methoden der Basisklasse enthält, er kann also gar nicht wissen, wo die Methode eigentlich herkommt.)

    Mit Python 3 wird das Klassensystem aber nochmal umgestellt, ich habe mal irgendwo gelesen, dass dieses Verhalten auch zur Diskussion stand.

    Viele Grüße
    Christian

    PS: Du nimmst Python, weil Java zu langsam ist? 😃 😃



  • also eine Tiefen-, keine Breitensuche, auch wenn eine Breitensuche intuitiver wäre!

    O ja, das principle of least surprise...
    ( import this )

    ich lerne grade Python

    Schau beizeiten mal auf www.python-forum.de , dort wissen die erfahrungsgemäß gut über sowas bescheid.


Log in to reply