Donc je suivais Le super python est considéré comme dangereux et est allé tester ses exemples.
Cependant, Exemple 1-3 qui est censé montrer la manière correcte d'appeler super
lors de la manipulation __init__
les méthodes qui attendent des arguments différents, ne fonctionnent pas.
Voilà 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 object
elle-même viole l'une des meilleures pratiques mentionnées dans le document, qui est que les méthodes qui utilisent super
doit accepter *args
y **kwargs
.
De toute évidence, M. Knight s'attendait à ce que ses exemples fonctionnent, alors est-ce quelque chose qui a été modifié dans les versions récentes de Python ? J'ai vérifié les versions 2.6 et 2.7, et ça ne fonctionne pas sur les deux.
Quelle est donc la bonne façon de traiter ce problème ?