是否有类似Python描述符协议的东西用其他语言实现?这似乎是一种增加模块化/封装性而不会使包含类的实现膨胀的好方法,但我从未听说过任何其他语言中有类似的事情。由于查找开销,其他语言是否可能不存在这种情况?

有帮助吗?

解决方案

我也没有听说过直接等效的东西。你也许可以用宏达到同样的效果,特别是在像 Lisp 这样具有极其强大的宏的语言中。

如果其他语言开始合并类似的东西,我一点也不会感到惊讶,因为它是如此强大。

其他提示

Ruby 和 C# 都可以让您通过为属性指定 getter/setter 方法来轻松创建访问器,就像在 Python 中一样。然而,这并不是为了让您自然地以 Python 允许的方式在另一个类中编写这些方法的代码。在实践中,我不确定这有多重要,因为每次我看到通过描述符协议定义的属性都是在同一个类中实现的。

编辑:我的阅读障碍该死(我的意思是粗心阅读)。出于某种原因,我总是将“描述符”读为“装饰器”,反之亦然,即使我是同时输入这两者的人。我将保持我的帖子不变,因为它具有有效的信息,尽管信息与问题完全无关。

“装饰器”一词本身实际上是著名的《设计模式》一书中描述的一种设计模式的名称。维基百科文章包含许多不同编程语言的装饰器用法示例: http://en.wikipedia.org/wiki/Decorator_pattern

然而,那篇文章中的装饰器是面向对象的;他们有实现预定义接口的类,该接口允许另一个现有类以某种方式表现不同,等等。Python 装饰器通过在运行时用另一个函数替换一个函数来以函数方式起作用,允许您有效地修改/替换该函数、插入代码等。

这在 Java 世界中称为面向方面编程,AspectJ Java 编译器可让您执行此类操作并将 AspectJ 代码(它是 Java 的超集)编译为 Java 字节码。

我对 C# 或 Ruby 不太熟悉,不知道他们的装饰器版本是什么。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top