gpt4 book ai didi

python - 如何实例化分派(dispatch)到方法所需的类?

转载 作者:太空宇宙 更新时间:2023-11-03 17:49:17 24 4
gpt4 key购买 nike

我有一个调度程序,其中字典包含键,每个键都有一个要调用的方法/函数列表。

operation_request_handlers = {
'permissionsVARVARVARVARGET': [jwtoken.validate, permission_query],
'permissionsVARVARVARVARPOST': [jwtoken.validate, permission_set],
'permissionsVARVARVARVARDELETE': [jwtoken.validate, permission_delete],
}

如果调度目标是一个函数(即permission_query,或者目标是一个静态方法(即jwtoken.validate)),则此方法可以正常工作。

问题是我无法弄清楚在 jwtoken.validate 不是静态方法的情况下如何分派(dispatch)。

据我了解,我首先需要实例化 jwtoken 然后在该实例上调用 validate 方法。这是正确的吗?鉴于我所拥有的只是jwtoken.validate,我该如何实例化jwtoken类?

更新:很多人发表了评论,谢谢大家。我目前的想法是,我应该将有效的调度目标限制为可调用对象。

最佳答案

您需要预先创建实例并存储绑定(bind)的方法,或者稍后将该方法绑定(bind)到实例。

如果您只需要一个实例,则可以使用第一个实例;然后可以简单地查找这些方法并将其存储在映射中:

a_token = jwtoken()
operation_request_handlers = {
'permissionsVARVARVARVARGET': [a_token.validate, permission_query],
'permissionsVARVARVARVARPOST': [a_token.validate, permission_set],
'permissionsVARVARVARVARDELETE': [a_token.validate, permission_delete],
}

这假设 jwtoken() 类不接受任何其他参数。

如果您每次都需要一个实例,您可以将该实例作为您存储的未绑定(bind)方法的第一个参数传递;

operation_request_handlers = {
'permissionsVARVARVARVARGET': [jwtoken.validate, permission_query],
'permissionsVARVARVARVARPOST': [jwtoken.validate, permission_set],
'permissionsVARVARVARVARDELETE': [jwtoken.validate, permission_delete],
}

method, permission = operation_request_handlers[some_key]
a_token = jwtoken()
result method(a_token, *other_arguments)

虽然在实例上查找方法会产生一个绑定(bind)方法(并且它们会将实例作为该方法的self第一个参数传递),但查找类上的方法会生成一个未绑定(bind)方法(或者如果您使用的是 Python 3,则简称为函数),并且您需要显式传入第一个参数。

关于python - 如何实例化分派(dispatch)到方法所需的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29310813/

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