gpt4 book ai didi

python - 如何延迟在 __init__ 中传递的 python 表达式的求值

转载 作者:行者123 更新时间:2023-12-02 18:07:47 25 4
gpt4 key购买 nike

我有一个场景,我想在传递给另一个类的 init 的类之间使用逻辑运算符。但是,我想推迟对运算符的评估以调用基本上在 __call__ 内的对象。在那里,我想传递逻辑运算符所需的更多参数。

基本上,我想实现这个接口(interface):

IsAllowed(classes=[Auth1('some_value') | Auth2('some_other_value')]

但是,我想推迟对 classes=[Auth1('some_value') | 的评估Auth2('some_other_value') 到在 IsAllowed 上调用 __call__ 的时间,并传递一些在逻辑操作中使用的额外参数。

这就是 Auth 类在底层的样子:

class Auth:

def __or__(self, other):
return self.has_perm(run_time_arg) or other.has_perm(run_time_arg)

有办法实现吗?

最佳答案

如果您想允许延迟执行(稍后提供 some_value),请重新安排 API 以让您的调用者传递 lambda:

IsAllowed(classesFn = lambda value: [Auth1(value) | Auth2(value)])

...然后让被调用者调用该函数以获取它返回的值。


这可能看起来像:

class IsAllowed(object):
def __init__(self, classesFn=None):
self.classesFn = classesFn
def __call__(self, value):
classes = self.classesFn(value)
# do logic using 'classes' here

关于python - 如何延迟在 __init__ 中传递的 python 表达式的求值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72911089/

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