2010-11-19 5 views

Répondre

3

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.

+0

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

1
  1. Vous ne savez que préfixer une définition avec @spam class|def name signifie simplement « définir le nom comme écrit ici, puis lier name-spam(name) »?

  2. 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.

  3. 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 ...

Questions connexes