装饰器是Python的重要组成部分。简单来说:它们是修改另一个功能的功能的功能。它们有助于缩短我们的代码。
例如:
def greet(name):
def get_message():
return "Hello "
result = get_message()+name
return result
print greet("John")
# Outputs: Hello John
我们可以使用python函数装饰器在上面的代码中更简单,更轻松地完成工作:
@greet
def get_message():
return "Hello"
我认为装饰器非常有用。在java或c#中有类似的东西吗?我知道@override等,但我找不到类似python的装饰器。
答案 0 :(得分:1)
在Java中没有等同于装饰器。
据我了解,Python中的装饰器本质上是方法转换的语法糖。例如(来自PEP 318):
def foo(cls):
pass
foo = synchronized(lock)(foo)
foo = classmethod(foo)
成为这个:
@classmethod
@synchronized(lock)
def foo(cls):
pass
这种事情在Java中不起作用,因为Java方法不是第一类对象,Java方法和方法名之间的绑定是不可变的。
使用注释驱动的代码Java源代码或字节码重写等等,您可以使用Python装饰器做一些事情。但是,以这种方式实现的装饰器应该被视为Java语言的一部分。 (就像Lombok-ified Java不是真正的Java一样。)