'@';python decorator用于执行类似于java中的方法重写的操作?
我对python比较陌生,最近刚刚接触了“@”python装饰程序。我知道它有很多用途,但我想澄清一下,我对它的一个用途的理解是否正确,更具体地说,就是它在下面代码中的用法'@';python decorator用于执行类似于java中的方法重写的操作?,java,python,flask,decorator,Java,Python,Flask,Decorator,我对python比较陌生,最近刚刚接触了“@”python装饰程序。我知道它有很多用途,但我想澄清一下,我对它的一个用途的理解是否正确,更具体地说,就是它在下面代码中的用法 @app.before_request def before_request(): g.db = connect_db() 我在使用Flask时遇到了decorator,我想知道python中的上述代码是否使用“@”decorator来“重写”app类中的before_request方法。我不知道python是否有
@app.before_request
def before_request():
g.db = connect_db()
我在使用Flask时遇到了decorator,我想知道python中的上述代码是否使用“@”decorator来“重写”app类中的before_request方法。我不知道python是否有任何其他形式的方法重写,比如java,但由于我了解java,如果确实是这样的话,我会更容易理解它。在python中,函数是第一类对象,因此它们可以作为参数传递 为了清楚地解释以下内容,我将重写您的函数:
@app.before_request
def f():
g.db = connect_db()
首先,app.before\u request
是函数
这里发生的情况如下:
def f():
g.db = connect_db()
f = app.before_request(f)
因此,函数app.before\u request
应用于函数f
作为app.before\u request
用作装饰器,将app.before\u request
的结果再次分配给f
。但在这种情况下,这并不重要。重要的是,app.before\u request
在内部使用f
来利用它
Decorator仅仅是为了简洁和美观地描述它
您可以通过以下代码实现同样的效果(我认为它的可读性不如使用decorator的代码):
好的,这比我读的文档更有意义。谢谢。装饰师一开始有点难以理解。但是当你试着和他们一起工作时,你会发现他们是一件非常简单的事情。请记住,Python中的函数可以像任何其他对象一样传递,而decorator只是在一条语句中应用和重新分配惟一的东西。
def f():
g.db = connect_db()
app.before_request(f)