J'essayais d'envelopper mon cerveau autour de Decorators en python mais ne peux pas comprendre pourquoi nous ne pouvons pas réaliser la même chose en utilisant des sous-classes?Quelle est la différence entre l'utilisation de décorateurs et l'extension d'une sous-classe par héritage?
Répondre
Vous pouvez obtenir la même chose en utilisant des sous-classes, et en fait vous n'avez même pas besoin de sous-classes - vous pouvez également obtenir la même chose simplement en enveloppant une méthode dans une autre méthode et en la réaffectant. Il y a eu beaucoup de discussions sur la question de savoir si la syntaxe du décorateur doit être ajoutée à la langue car elle ne vous permet pas de faire quelque chose de nouveau et nécessite que les programmeurs apprennent une nouvelle chose. Ce que la syntaxe fait est de formaliser un modèle que beaucoup de gens utilisaient déjà, et de le faire à une syntaxe standard qui a un nom et des lignes directrices sur la façon d'utiliser. Il n'est pas nécessaire que vous utilisiez des décorateurs - vous pouvez obtenir le même effet par d'autres moyens - mais l'utilisation de l'approche standard officiellement soutenue avec une syntaxe concise et facile à lire facilite la vie.
J'espère bien que OP sait que '@spam \ nclass Ham {...}' == 'la classe Ham {...}; Ham = spam (Ham) 'et demandez simplement pourquoi utiliser ce pattern au lieu d'utiliser des sous-classes. – delnan
Vous ne savez que préfixer une définition avec
@spam class|def name
signifie simplement « définir le nom comme écrit ici, puis liername
-spam(name)
»?Les décorateurs sont très souvent appliqués aux fonctions plutôt qu'aux classes. Bien sûr, vous pouvez créer une classe et une sous-classe appelables ... vous pouvez également implémenter votre propre type entier. Aucun n'est viable.
Dans bon nombre de cas, vous propably pourrait faire quelque chose très similaire par le sous-classement ... sauf que décorateurs sont définis une fois et peuvent être appliqués à plusieurs classes, par opposition à l'écriture d'une nouvelle sous-classe vous-même dans tous les cas . Chaque solution à cela inévitablement finirait par être équivalente ou très similaire aux décorateurs.
Comme robert souligne dans un commentaire, si vous aviez un exemple, les réponses pourraient être plus précis ...
- 1. Quelle est la différence entre Multiple Héritage et Polymorphisme?
- 2. Décorateurs et héritage Python
- 3. Quelle est la différence entre dict() et {}?
- 4. Quelle est la différence entre "$^N" et "$ +"?
- 5. Quelle est la différence entre = et: =
- 6. quelle est la différence entre:.! et: r !?
- 7. Quelle est la différence entre ~ et! opérateur?
- 8. Quelle est la différence entre ces importations?
- 9. Quelle est la différence entre la saturation et la luminosité?
- 10. Quelle est la différence entre l'utilisation de WorkflowInvoker et WorkflowApplication?
- 11. Quelle est la différence entre l'utilisation de ProtocolType.IP et ProtocolType.Tcp
- 12. Quelle est la différence entre mouseout() et maskelve() de jQuery?
- 13. Quelle est la différence entre getRemoteHost() et getServerName() de ServletRequest?
- 14. Quelle est la différence entre IContainer et IUnityContainer de Prism?
- 15. Linq: Quelle est la différence entre Select et Où
- 16. Quelle est la différence entre ces extraits?
- 17. Quelle est la différence entre ces commentaires
- 18. Quelle est la différence entre applicationDidReceiveMemoryWarning, didReceiveMemoryWarning?
- 19. Quelle est la différence entre la plate-forme et l'outil?
- 20. Quelle est la différence entre ces codes?
- 21. Quelle est la différence entre Q_WS_ * et Q_OS_ * dans Qt?
- 22. Quelle est la différence entre la sérialisation et l'encodage?
- 23. Quelle est la différence entre la version et l'itération?
- 24. Quelle est la différence entre la programmation parallèle et multicœur?
- 25. Quelle est la différence entre le tuyau et la douille?
- 26. Modèles Bugzilla: quelle est la différence entre [% et [% +
- 27. Quelle est la différence entre un "nonce" et un "GUID"?
- 28. Quelle est la différence entre synchronisation synchronisée et statique?
- 29. Quelle est la différence entre les fonctions NtFsControlFile() et DeviceIoControl()?
- 30. Quelle est la différence entre ResolveUrl et ResolveClientUrl?
Avez-vous un exemple à l'esprit? – robert