2010-11-19 4 views

Antwort

3

Sie können das Gleiche mit Unterklassen erreichen, und tatsächlich brauchen Sie nicht einmal Unterklassen - Sie können das Gleiche auch einfach erreichen, indem Sie eine Methode in eine andere Methode einfügen und neu zuweisen. Es gab eine Menge Diskussionen darüber, ob die Dekoratorsyntax der Sprache hinzugefügt werden sollte oder nicht, da es Ihnen nicht erlaubt, etwas Neues zu tun, und Programmierer neue Dinge lernen müssen.

Was die Syntax Dooes formalisiert ein Muster, das viele Leute bereits verwendet haben, und machen es zu einer Standardsyntax, die einen Namen und Richtlinien zur Verwendung hat. Es ist nicht notwendig, dass Sie Dekoratoren verwenden - Sie können den gleichen Effekt auf andere Weise erzielen - aber die Verwendung des offiziell unterstützten Standardansatzes mit einer prägnanten, leicht zu lesenden Syntax erleichtert das Leben ein wenig.

+0

Ich hoffe, dass OP weiß, dass @ @spam \ nclass Ham {...} '==' class Ham {...}; Ham = spam (Ham) 'und fragen Sie einfach, warum Sie dieses Muster verwenden, anstatt Unterklassen zu verwenden. – delnan

1
  1. Sie wissen, dass das Voranstellen eine Definition mit @spam class|def name bedeutet nur „Namen definieren, wie hier geschrieben, dann name-spam(name) binden“?

  2. Dekoratoren werden sehr oft auf Funktionen und nicht auf Klassen angewendet. Sicher, Sie könnten eine aufrufbare Klasse und Unterklasse erstellen, die ... Sie könnten auch Ihren eigenen Integer-Typ implementieren. Keine ist lebensfähig.

  3. In ganz wenigen Fällen Sie, propably etwas sehr ähnliches tun könnte durch Subklassen ... außer, dass Dekorateure einmal definiert werden und kann auf mehrere Klassen angewendet werden, im Gegensatz zu einer neuen Unterklasse selbst in jedem Fall schriftlich . Jede Lösung würde zwangsläufig den Dekorateuren gleichkommen oder sehr ähnlich sein.

als Robert in einem Kommentar weist darauf hin, wenn Sie ein Beispiel haben die Antworten präziser sein könnten ...

Verwandte Themen