gpt4 book ai didi

python - 重新评估/更新在 Python 中作为类变量传递的条件表达式的真值的最佳方法

转载 作者:太空宇宙 更新时间:2023-11-04 11:08:31 25 4
gpt4 key购买 nike

在我的代码中,我想创建一个“事件”类。在初始化时,事件被传递给它触发的条件。我希望可以灵活地将任何 bool 表达式作为触发器传递。用最简单的话来说:

class event():
def __init__(self,condition,outcome):
self.condition = condition
self.outcome = outcome

def check(self):
if self.condition:
print(self.outcome)

当然这不太正确,因为我的意图是让类计算传递的原始表达式,而不是它在创建对象时的真值。例如:

foo = 0
e = event(foo != 0,"foo has changed value")
e.check()
foo = 1
e.check()

期望的结果是 check 方法在第二次调用时打印一条语句。

我愿意重新设计整个类的概念,但以这种方式设计事物的主要目的是事件的可能结果集相当小,足以用几个类变量进行编码,触发条件将是在实例化时已知,但可能变化很大,并包含来自一系列类的对象。

最后一点信息:将进入条件语句的所有变量都将在事件对象创建之前实例化。

最佳答案

您想传递一个可调用对象而不是实际的 bool 值,就像这样(为清楚起见添加了类型注释):

from typing import Callable

class event():
def __init__(self, condition: Callable[[], bool], outcome: str):
self.condition = condition
self.outcome = outcome

def check(self):
if self.condition():
print(self.outcome)

然后您将通过传递一个可调用对象来使用它,当您调用它时该可调用对象会返回一个 bool 值;一种简单的内联方式是通过 lambda:

foo = 0
e = event(lambda: foo != 0, "foo has changed value")
e.check()
foo = 1
e.check()

关于python - 重新评估/更新在 Python 中作为类变量传递的条件表达式的真值的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58848278/

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