ou devrais-je simplement référencer explicitement les superclasses dont les méthodes que je veux appeler? p>
Il semble fragile de répéter les noms de super classes lors de la référencement de leurs constructeurs, mais de cette page http: // fuhm .NET / Super-Nocif / fait de bons arguments contre l'utilisation de Super (). P>
6 Réponses :
Oui, vous devez utiliser Collez simplement sur les arguments des mots clés dans votre Je conviens que c'est fragile, mais pas moins que d'utiliser le nom de la classe héritée. P> super () code> sur d'autres méthodes. Ceci est maintenant le modèle d'héritage d'objet standard dans Python 3. P>
__ init __ code> et vous ne devriez pas avoir trop de problèmes. De plus, vous pouvez utiliser
** kwargs code> pour prendre en charge des paramètres supplémentaires non définis dans les niveaux de la chaîne d'héritage. p>
Vous avez écrit un bon point. Mais envisageriez-vous de faire votre réponse un peu plus verbeuse? oui code> à quelle question? Titre de la question
Est-il une bonne idée d'utiliser Super () en Python? Code> ou la première ligne de la question
ou dois-je simplement référencer explicitement les superclasses dont je veux appeler les méthodes? Code> . Après avoir lu votre réponse Plusieurs fois B> Je pense que vous avez suggéré de référencer explicitement les superclasses au lieu d'utiliser Super. Mais à mon avis, il est difficile de comprendre votre réponse sans le lire plusieurs fois.
@ Md.abunafeebnazahid a ajouté un libellé supplémentaire. J'espère que cela aide.
Merci. C'est bien mieux maintenant.
Vous pouvez utiliser super, mais comme indique l'article, il y a des inconvénients. Tant que vous les connaissez, il n'y a aucun problème à utiliser la fonctionnalité. C'est comme des gens qui disent "l'utilisation de la composition, pas d'héritage" ou "ne jamais utiliser de variables globales". Si la fonctionnalité existe, il y a une raison. Assurez-vous simplement de comprendre pourquoi et de quoi et les utiliser judicieusement. P>
"Si la fonctionnalité existe, il y a une raison." I> Cet argument est tout simplement faux. De nombreuses langues ont des fonctionnalités qui ne devraient être utilisées jamais par personne.
J'aime super () plus parce que cela vous permet de changer la classe héritée (par exemple lorsque vous refactez et ajoutez une classe intermédiaire) sans le changer sur toutes les méthodes. P>
Sauf si vous n'utilisez pas Python 3 encore (qui est la majorité des utilisations de Python)
Que veux-tu dire? Super () est sur Python 2 aussi.
Il a été reporté je crois.
Le livre Programmation Expert Python a discuté du sujet des "super paptes" Au chapitre 3. Cela vaut la peine de lire. Vous trouverez ci-dessous la conclusion du livre: P>
Super Usage doit être cohérent: dans une hiérarchie de classe, Super doit être utilisé partout ou nulle part. Mélanger des appels super et classiques est une pratique déroutante. Les gens ont tendance à éviter de super, car leur code est plus explicite. p> blockQuote>
EDIT: strong> aujourd'hui, j'ai lu cette partie du livre à nouveau. Je copierai quelques phrases supplémentaires, car Super Usage est délicat: p>
- Évitez de multiples héritage dans votre code. LI>
- soyez compatible avec son utilisation et ne mélange pas de nouveau style et style ancien. li>
- Vérifiez la hiérarchie de la classe avant d'appeler ses méthodes dans votre sous-classe. LI> ul>
Le problème Les gens ont avec D'autre part, on peut se demander si
Toutes les super-verrues ne sont pas des notes de certains
problème grave sous-jacent. Cela pourrait
bien que le problème ne soit pas avec
Super, ni avec des méthodes de coopération:
Le problème peut être avec plusieurs
héritage lui-même. p>
blockQuote>
La laçon principale est que vous devriez essayer d'éviter de multiples héritage. P>
Dans l'intérêt de la cohérence, j'utilise toujours Super, même si, pour un héritage unique, cela ne comporte pas vraiment (à part le petit avantage de ne pas avoir à connaître le nom de la classe mère). Dans Python 3+ Super code> est plus un problème d'héritage multiple. Donc, c'est un peu injuste de blâmer
super code>. Sans
Super code> Héritage multiple est encore pire. Michele Simionato gentiment enveloppé dans son Article de blog sur Super: < / p>
Super code> est plus pratique, il faut donc utiliser super. P>
Super () tente de résoudre pour vous le problème de l'héritage multiple; Il est difficile de reproduire sa sémantique et vous ne devriez certainement pas créer de nouvelle sémantique sauf si vous êtes totalement sûr.
Pour héritage unique, il n'y a vraiment aucune différence entre p> et p> donc je suppose que c'est juste la question de goût. p> p>