J'ai donc suivi Super Considered Harmful de Python et suis allé tester ses exemples.
Cependant, l' exemple 1-3 , qui est censé montrer la manière correcte d'appeler superlors de la gestion de __init__méthodes qui attendent des arguments différents, ne fonctionne pas.
Voici ce que je reçois:
~ $ python example1-3.py
MRO: ['E', 'C', 'A', 'D', 'B', 'object']
E arg= 10
C arg= 10
A
D arg= 10
B
Traceback (most recent call last):
File "Download/example1-3.py", line 27, in <module>
E(arg=10)
File "Download/example1-3.py", line 24, in __init__
super(E, self).__init__(arg, *args, **kwargs)
File "Download/example1-3.py", line 14, in __init__
super(C, self).__init__(arg, *args, **kwargs)
File "Download/example1-3.py", line 4, in __init__
super(A, self).__init__(*args, **kwargs)
File "Download/example1-3.py", line 19, in __init__
super(D, self).__init__(arg, *args, **kwargs)
File "Download/example1-3.py", line 9, in __init__
super(B, self).__init__(*args, **kwargs)
TypeError: object.__init__() takes no parameters
Il semble que objectlui - même viole l'une des meilleures pratiques mentionnées dans le document, à savoir que les méthodes qui utilisent superdoivent accepter *argset **kwargs.
Maintenant, évidemment, M. Knight s'attendait à ce que ses exemples fonctionnent, alors est-ce quelque chose qui a été changé dans les versions récentes de Python? J'ai vérifié 2.6 et 2.7, et cela échoue sur les deux.
Alors, quelle est la bonne façon de traiter ce problème?