有没有其他语言实现的类似 Python 描述符协议的东西?这似乎是一种增加模块化/封装性而不会使包含类的实现膨胀的好方法,但我从未听说过任何其他语言中有类似的东西。由于查找开销,它是否可能在其他语言中不存在?
2 回答
我也没有听说过直接的等价物。您可能可以使用宏来实现相同的效果,尤其是在像 Lisp 这样具有极其强大的宏的语言中。
如果其他语言开始包含类似的东西,我一点也不感到惊讶,因为它是如此强大。
Ruby 和 C# 都允许您通过为属性指定 getter/setter 方法来轻松创建访问器,这与 Python 非常相似。但是,这并不是为了让您以 Python 允许的方式自然地让您在另一个类中编写这些方法的代码。在实践中,我不确定这有多重要,因为每次我看到通过描述符协议定义的属性时,它都是在同一个类中实现的。
编辑:该死我的阅读障碍(我的意思是粗心阅读)。出于某种原因,我总是将“descriptor”读作“decorator”,反之亦然,即使我是两个都输入的人。我会保持我的帖子完整,因为它有有效的信息,尽管信息与问题完全无关。
术语“装饰器”本身实际上是著名的“设计模式”一书中描述的设计模式的名称。Wikipedia 文章包含许多在不同编程语言中使用装饰器的示例:http ://en.wikipedia.org/wiki/Decorator_pattern
然而,那篇文章中的装饰器是面向对象的;他们有实现预定义接口的类,该接口允许另一个现有类以某种方式表现不同,等等。Python 装饰器通过在运行时用另一个函数替换一个函数来以函数方式起作用,允许您有效地修改/替换该函数、插入代码等。
这在 Java 世界中被称为面向方面的编程,而 AspectJ Java 编译器允许您做这些事情并将您的 AspectJ 代码(它是 Java 的超集)编译成 Java 字节码。
我对 C# 或 Ruby 不够熟悉,不知道他们的装饰器版本是什么。