bn.*_*bn. 43 python java python-decorators java-annotations
Python装饰器是相同的还是相似的,或者与Java注释或Spring AOP或Aspect J等基本不同?
Pav*_*sov 56
Python装饰器只是用于将函数传递给另一个函数并用结果替换第一个函数的语法糖:
@decorator
def function():
pass
Run Code Online (Sandbox Code Playgroud)
是语法糖
def function():
pass
function = decorator(function)
Run Code Online (Sandbox Code Playgroud)
Java注释本身只是存储元数据,您必须有一些东西来检查它们以添加行为.
Java AOP系统是构建在Java之上的巨大的东西,装饰器只是语言语法,几乎没有附加语义,你无法真正比较它们.
Shr*_*yas 10
这是一个非常有效的问题,任何人都可以同时涉足这两种语言.我自己花了一些时间在python上,最近我已经开始使用Java了,这是我对这个比较的看法.
Java注释 - 只是:注释.他们是标记; 关于他们标记/注释的底层对象的其他元数据的容器.它们的存在不会改变底层的执行流程,或者不会在底层的顶层添加某种封装/封装.那他们怎么帮忙?它们由 - 注释处理器读取和处理.它们包含的元数据可以由定制编写的注释处理器使用,以添加一些辅助功能,使生活更轻松; 但是,他们再一次,他们不会改变基础的NOR包裹的执行流程.
使用python装饰器的人会清楚"不改变执行流程"的压力.Python装饰器虽然在外观和感觉上类似于Java注释,但却完全不同.根据用户的需要,他们采用底层并以任何方式包裹它自己,甚至可以完全避免运行底层本身,如果选择这样做的话.他们采取底层,围绕它自己包裹,并用包裹的底层替换底层.他们实际上是"代理"潜在的!
现在,这与Aspects在Java中的工作方式非常相似!方面本身在机制和灵活性方面都有很大的发展.但在本质上他们所做的是 - 采用'建议'的方法(我在春天用AOP命名,而且不确定它是否也适用于AspectJ),围绕它们包装功能,以及谓词和喜欢,以及'使用包装的代理''建议'方法.
请注意,这些思考是在一个非常抽象和概念层面,以帮助了解整体情况.当你开始深入研究时,所有这些概念 - 装饰器,注释,方面 - 都有相当大的范围.但在抽象层面上,它们非常具有可比性.
TLDR
在外观和感觉方面,python装饰器可以被认为类似于Java注释,但是它们的工作方式非常类似于Aspects在Java中的工作方式.
| 归档时间: |
|
| 查看次数: |
12374 次 |
| 最近记录: |