金字塔函数中对象的范围

2024-10-05 14:27:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我很难理解请求和请求的范围请求.db在以下修饰的python函数中(此函数是金字塔“Todo List Application in One File”教程的一部分):

@subscriber(NewRequest)
def new_request_subscriber(event):
    request = event.request
    settings = request.registry.settings
    request.db = sqlite3.connect(settings['db'])

我认为函数中的赋值仅限于该函数,除非声明为全局赋值;因此根据我有缺陷的理解,请求和请求.db函数完成时将超出范围。但在这种情况下,我显然错了,因为请求.db随后在其他函数中访问。有人能解释一下魔法物体的起源和范围吗请求.db拜托?你知道吗


Tags: 函数ineventdbsettingsapplicationrequest教程
1条回答
网友
1楼 · 发布于 2024-10-05 14:27:50

request实际上只是event.request的本地别名。该函数可以重写如下:

def new_request_subscriber(event):
     event.request.db = sqlite3.connect(event.request.registry.settings['db'])

所以我们要做的就是修改传入的event对象的属性。由于Python传递的是实际对象,因此无论调用什么函数,都可以看到修改。你知道吗

相关问题 更多 >