Pregunta

¿Existe algo parecido al protocolo descriptor de Python implementado en otros idiomas?Parece una buena manera de aumentar la modularidad/encapsulación sin inflar la implementación de la clase contenedora, pero nunca he oído hablar de algo similar en ningún otro lenguaje.¿Es probable que esté ausente en otros idiomas debido a la sobrecarga de búsqueda?

¿Fue útil?

Solución

Tampoco he oído hablar de un equivalente directo.Probablemente podrías lograr el mismo efecto con las macros, especialmente en un lenguaje como Lisp que tiene macros extremadamente poderosas.

No me sorprendería en absoluto que otros lenguajes comenzaran a incorporar algo similar porque es muy poderoso.

Otros consejos

Tanto Ruby como C# le permiten crear fácilmente accesores especificando métodos getter/setter para un atributo, muy parecido a Python.Sin embargo, esto no está diseñado para permitirle escribir de forma natural el código para estos métodos en otra clase de la manera que lo permite Python.En la práctica, no estoy seguro de cuánto importa esto, ya que cada vez que veo un atributo definido a través del protocolo descriptor se implementa en la misma clase.

EDITAR:Maldita sea mi dislexia (con lo que me refiero a lectura descuidada).Por alguna razón, siempre he leído "descriptor" como "decorador" y viceversa, incluso cuando soy yo quien escribe ambos.Dejaré mi publicación intacta ya que tiene información válida, aunque es información que no tiene absolutamente nada que ver con la pregunta.

El término "decorador" en sí es en realidad el nombre de un patrón de diseño descrito en el famoso libro "Patrones de diseño".El artículo de Wikipedia contiene muchos ejemplos en diferentes lenguajes de programación sobre el uso del decorador: http://en.wikipedia.org/wiki/Decorator_pattern

Sin embargo, los decoradores de ese artículo están orientados a objetos;tienen clases que implementan una interfaz predefinida que permite que otra clase existente se comporte de manera diferente de alguna manera, etc.Los decoradores de Python actúan de manera funcional reemplazando una función en tiempo de ejecución con otra función, lo que le permite modificar/reemplazar efectivamente esa función, insertar código, etc.

Esto se conoce en el mundo Java como programación orientada a aspectos, y el compilador Java de AspectJ le permite hacer este tipo de cosas y compilar su código AspectJ (que es un superconjunto de Java) en código de bytes de Java.

No estoy lo suficientemente familiarizado con C# o Ruby para saber cuál sería su versión de decoradores.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top