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

时间:2020-03-05 18:44:55  来源:igfitidea点击:

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

解决方案

回答

我也没有听说过直接等效的方法。使用宏可能会达到相同的效果,尤其是在像Lisp这样具有强大功能的语言中。

如果其他语言因为功能如此强大而开始加入类似的东西,我将不会感到惊讶。

回答

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

编辑:我的阅读障碍(我的意思是粗心阅读)。出于某种原因,即使我是同时键入两者的人,我也总是将" descriptor"读作" decorator",反之亦然。我会保留原帖,因为它包含有效信息,尽管该信息与问题绝对无关。

术语"装饰器"本身实际上是著名的"设计模式"书中描述的设计模式的名称。 Wikipedia文章包含使用装饰器用法的不同编程语言的许多示例:http://en.wikipedia.org/wiki/Decorator_pattern

但是,该文章中的装饰器是面向对象的。它们具有实现预定义接口的类,这些接口允许另一个现有类以某种方式表现不同,等等。Python装饰器通过在运行时将功能替换为另一个功能来发挥功能,从而使我们可以有效地修改/替换该功能,插入代码等。

这在Java世界中称为面向方面的编程,而AspectJ Java编译器使我们可以执行这些操作,并将AspectJ代码(这是Java的超集)编译为Java字节码。

我对Cor Ruby不够熟悉,无法知道他们的装饰器版本。