Frage

Gibt es so etwas wie das Python-Deskriptorprotokoll, das in anderen Sprachen implementiert ist?Es scheint eine gute Möglichkeit zu sein, die Modularität/Kapselung zu erhöhen, ohne die Implementierung Ihrer enthaltenden Klasse aufzublähen, aber ich habe noch nie von etwas Ähnlichem in anderen Sprachen gehört.Fehlt es aufgrund des Suchaufwands wahrscheinlich in anderen Sprachen?

War es hilfreich?

Lösung

Ich habe auch noch nichts von einem direkten Äquivalent gehört.Mit Makros könnten Sie wahrscheinlich den gleichen Effekt erzielen, insbesondere in einer Sprache wie Lisp, die über äußerst leistungsfähige Makros verfügt.

Es würde mich überhaupt nicht überraschen, wenn andere Sprachen anfangen würden, etwas Ähnliches zu integrieren, weil es so mächtig ist.

Andere Tipps

Mit Ruby und C# können Sie ganz einfach Accessoren erstellen, indem Sie Getter/Setter-Methoden für ein Attribut angeben, ähnlich wie in Python.Allerdings ist dies nicht darauf ausgelegt, dass Sie den Code für diese Methoden auf natürliche Weise in einer anderen Klasse schreiben können, wie es Python zulässt.In der Praxis bin ich mir nicht sicher, wie wichtig das ist, da jedes Mal, wenn ich gesehen habe, dass ein durch das Deskriptorprotokoll definiertes Attribut in derselben Klasse implementiert wurde.

BEARBEITEN:Verdammt meine Legasthenie (womit ich unachtsames Lesen meine).Aus irgendeinem Grund habe ich „descriptor“ immer als „decorator“ gelesen und umgekehrt, auch wenn ich derjenige bin, der beides eingibt.Ich lasse meinen Beitrag unverändert, da er gültige Informationen enthält, wenn auch Informationen, die absolut nichts mit der Frage zu tun haben.

Der Begriff „Dekorateur“ selbst ist eigentlich der Name eines Designmusters, das im berühmten Buch „Design Patterns“ beschrieben wird.Der Wikipedia-Artikel enthält viele Beispiele in verschiedenen Programmiersprachen für die Verwendung von Decorators: http://en.wikipedia.org/wiki/Decorator_pattern

Allerdings sind die Dekorateure in diesem Artikel objektorientiert;Sie haben Klassen, die eine vordefinierte Schnittstelle implementieren, die es einer anderen vorhandenen Klasse ermöglicht, sich irgendwie anders zu verhalten usw.Python-Dekoratoren agieren auf funktionale Weise, indem sie eine Funktion zur Laufzeit durch eine andere Funktion ersetzen, sodass Sie diese Funktion effektiv ändern/ersetzen, Code einfügen usw. können.

Dies wird in der Java-Welt als aspektorientierte Programmierung bezeichnet, und mit dem AspectJ-Java-Compiler können Sie solche Dinge tun und Ihren AspectJ-Code (der eine Obermenge von Java ist) in Java-Bytecode kompilieren.

Ich bin mit C# oder Ruby nicht gut genug vertraut, um zu wissen, wie ihre Version von Dekoratoren aussehen würde.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top