108 votes

python super() déclenche TypeError ! Pourquoi ?

Le code suivant lève un TypeError :

Si, toutefois, je remplace classe X avec la classe X(object), le même code fonctionne. J’utilise python 2.5.2. Quelle est l’explication pour cela ?

133voto

Cody Brocious Points 24042

La raison est que super() fonctionne uniquement sur les classes de style nouveau, qui, dans la série 2.x signifie s’étendant de l’objet.

13voto

bobince Points 270740

En outre, n’utilisez pas super() à moins que vous ayez à. Il n’est pas l’usage générale « bonne chose » à voir avec les classes de style nouveau qui vous pourriez soupçonner.

Il y a des moments quand vous attendez l’héritage multiple et vous pourriez peut-être elle, mais jusqu'à ce que vous connaissez les détails poilus de la MRO, mieux le laisser seul et de s’en tenir à :

1voto

weberc2 Points 1584

J'ai essayé les différents X.() méthodes; cependant, ils semblent exiger une occurrence de X dans le but d'effectuer une(), donc je n'ai X().a(auto), ce qui semble plus complète que les précédentes réponses, au moins pour les applications que j'ai rencontré. Il ne semble pas être une bonne façon de gérer le problème, car il est inutile de construction et de destruction, mais il fonctionne très bien.

Mon application a été Python cmd.Cmd module, ce qui n'est évidemment pas un NewStyle objet pour une raison quelconque.

Résultat Final:

X().a(self)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X