Python 的装饰器和 Java 的注解在语法上这么相像是有什么内在的联系吗?

2016-11-08 16:36:34 +08:00
 misaka19000

Python 的装饰器是通过函数式编程来实现的, Java 的注解通过反射来实现,两者实现的方式虽然不一样,但是语法上真的十分相似啊,而且 Python 和 Java 的各种 Web 框架都特别喜欢用装饰器和注解来实现路由功能。。。

所以,这两种语法之间有什么样的内在联系吗,还是说其中一个是模仿的另外一个的语法,最早这种类型的语法是出自于哪种编程语言?

6416 次点击
所在节点    编程
10 条回复
misaka19000
2016-11-08 17:07:05 +08:00
来人啊!!!
skydiver
2016-11-08 17:29:07 +08:00
https://en.wikipedia.org/wiki/Python_syntax_and_semantics#Decorators

Python decorators were inspired in part by Java annotations, and have a similar syntax;

看一下维基百科就知道的事情,没必要来这里问
glasslion
2016-11-08 17:48:04 +08:00
misaka19000
2016-11-08 19:23:57 +08:00
@skydiver
@glasslion
感谢,学习到了
georgema1982
2016-11-09 03:02:09 +08:00
两者除了看上去相似,功能上完全不同。 java 的注解只是注解,它本身不改变被注解对象的行为和性质,只有理解这些注解的处理器才会改变行为。而 python 的装饰器会改变被装饰的对象的行为和性质。所以 python 装饰器比 java 注解更强大。
shyling
2016-11-09 10:52:29 +08:00
python 的装饰器只是一个语法糖而已。嵌套函数的简化写法。
java 的注解能实现更多好用的功能
misaka19000
2016-11-09 11:41:37 +08:00
@georgema1982
@shyling
所以到底哪个更强大一点。。。
shyling
2016-11-09 11:46:17 +08:00
@misaka19000 不是同一类的东西,只不过用了同一个 @
不过装饰器本身是没功能的 0 0 ,注解也只是一个标记
misaka19000
2016-11-09 11:53:15 +08:00
@shyling 明白了,语法一样,但是可以使用的领域却各自有区别
georgema1982
2016-11-10 05:20:18 +08:00
@shyling python 装饰器当然是有功能的,它立刻改变了被装饰的对象。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/319024

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX