Python 装饰器和 Java 注释共享相同的语法,但有两个截然不同的目的!它们完全不兼容或不可互换!
在最近的一个项目中,我有必要在 python 脚本上使用 java 注释语义,我搜索了一种模拟它的方法,发现:
在 Python 中有一个称为“Docstring”的功能!
它只不过是一个特殊的注释行,必须是模块、类或函数的第一行!
就像注释行一样,您可以使用任何形式的文本。但是在这种情况下,它对我来说如此特别的是它可以被 python 自省读取!
所以它可以像 Java Annotation 一样工作,也需要 Java 反射来解释和响应从它携带的元数据!!
请看一个简短的例子:
源 a.py
```
def some_function():
'''@myJavaLikeAnnotation()'''
... (my function code) ...
```
来源 b.py(我必须在其中处理 @myJavaLikeAnnotacion()):
import a
for element_name in dir(a):
element = getattr(a, element_name)
if hasattr(element, '__call__'):
if not inspect.isbuiltin(element):
try:
doc = str(element.__doc__)
if not doc == '@myJavaLikeAnnotation()':
# It don't have the 'java like annotation'!
break
... It have! Do what you have to do...
except:
pass
显然,缺点是必须自己解析在“python java like annotations”中使用的所有元数据!