重新计算/更新Python中作为类变量传递的条件表达式的真值的最佳方法

2024-10-03 19:25:38 发布

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

在我的代码中,我想创建一个“事件”类。初始化时,向事件传递一个触发条件。我希望能够灵活地将任何布尔表达式作为触发器传递。简单来说:

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方法在第二次调用语句时打印语句

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

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


Tags: 对象实例self目的eventfoo表达式def
1条回答
网友
1楼 · 发布于 2024-10-03 19:25:38

您希望传递一个可调用的值,而不是实际的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)

然后,您将通过传递一个callable来使用它,该callable在您调用它时返回bool;一种简单的内联方式是通过lambda

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

相关问题 更多 >