Nel libro Python in a Nutshell (2nd Edition) 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 un nuovo stile ma il risultato non è diverso da quello ottenuto con le classi vecchio stile. La versione python che sto usando per eseguire l'esempio è 2.5.2. Di seguito è riportato l'esempio:
class Base1(object): def amethod(self): print Classe "Base1" Base2(Base1): pass class Base3(object): def amethod(self): print Classe "Base3" Derivato(Base2,Base3): pass instance = Derived() instance.amethod() print Derived.__mro__
La chiamata instance.amethod()
stampa Base1
, ma secondo la mia comprensione dell'MRO con nuovo stile di classi l'output dovrebbe essere Base3
. La chiamata Derived.__mro__
stampa:
(<class "__main__.Derived">, <class "__main__.Base2">, <class "__main__.Base1">, <class "__main__.Base3">, <digita "oggetto">)
Non sono sicuro di aver compreso l'MRO con new le classi di stile non sono corrette o che sto facendo un errore sciocco che non sono in grado di rilevare. Per favore aiutami a capire meglio l'MRO.