Python描述符协议模拟在其他语言?

时间:2008-08-29 09:24:09

标签: python language-features encapsulation

是否有类似于其他语言实现的Python描述符协议?这似乎是一种很好的方法来增加模块化/封装而不会膨胀你的包含类的实现,但我从来没有听说过任何其他语言类似的东西。由于查找开销,是否可能缺少其他语言?

2 个答案:

答案 0 :(得分:4)

我也没有听说过直接对等。您可能可以使用宏实现相同的效果,尤其是在像Lisp这样具有极其强大的宏的语言中。

如果其他语言开始包含类似的内容,我会感到很惊讶,因为它非常强大。

答案 1 :(得分:0)

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

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

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

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

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

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