gpt4 book ai didi

java - '@' python 装饰器过去常常做一些类似于 java 中的方法重写的事情?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:49:42 25 4
gpt4 key购买 nike

我对 python 比较陌生,最近才接触到 '@' python 装饰器。我知道它有很多用途,但我想澄清一下我对其中一种用途的理解,更具体地说,它在以下代码中的用途是否正确。

@app.before_request
def before_request():
g.db = connect_db()

我在使用 Flask 时遇到了装饰器,我想知道上面的 python 代码是否使用“@”装饰器来“覆盖”“app”类中的“before_request”方法。我不知道 python 是否有任何其他形式的方法重写,比如 java,但因为我知道 java,所以如果确实如此,我会更容易理解它。

最佳答案

在 Python 中,函数是一等对象,因此它们可以作为参数传递。

为了以下解释的清晰性,我将重写您的函数:

@app.before_request
def f():
g.db = connect_db()

首先,app.before_request 是函数。

这里发生的事情如下:

def f():
g.db = connect_db()

f = app.before_request(f)

因此,函数 app.before_request 应用于函数 f

由于app.before_request被用作装饰器,app.before_request的结果再次赋值给f。但在这种情况下没关系。重要的是 app.before_request 在内部使用 f 来使用它。

装饰器只是为了简洁和漂亮的描述方式。

您可以通过这段代码实现同样的效果(我认为它的可读性不如带有装饰器的代码):

def f():
g.db = connect_db()

app.before_request(f)

关于java - '@' python 装饰器过去常常做一些类似于 java 中的方法重写的事情?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17127179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com