Nel libro Python in a Nutshell (2a edizione) c'è un esempio che usa
classi vecchio stile per dimostrare come i metodi vengono risolti nell'ordine di risoluzione classico e
come è diverso con il nuovo ordine.
Ho provato lo stesso esempio riscrivendo l'esempio in nuovo stile ma il risultato non è diverso da quello ottenuto con le classi vecchio stile. La versione di python che sto usando per eseguire l'esempio è 2.5.2. Di seguito è riportato l'esempio:
class Base1(object):
def amethod(self): print "Base1"
class Base2(Base1):
pass
class Base3(object):
def amethod(self): print "Base3"
class Derived(Base2,Base3):
pass
instance = Derived()
instance.amethod()
print Derived.__mro__
La chiamata viene instance.amethod()
stampata Base1
, ma secondo la mia comprensione dell'MRO con il nuovo stile di classi, l'output avrebbe dovuto essere Base3
. La chiamata viene Derived.__mro__
stampata:
(<class '__main__.Derived'>, <class '__main__.Base2'>, <class '__main__.Base1'>, <class '__main__.Base3'>, <type 'object'>)
Non sono sicuro se la mia comprensione di MRO con le nuove classi di stile sia errata o se sto facendo uno stupido errore che non sono in grado di rilevare. Per favore aiutami a comprendere meglio MRO.