当我更改变量(Python3)时,如何生成if语句触发器

当我更改变量(Python3)时,如何生成if语句触发器,python,python-3.x,Python,Python 3.x,我试图用Python3编写一个简单的小程序,其中有常量语句,每当变量发生变化时,这些语句将在代码中进一步激活,这样我就不必去搞乱决策。 例如: example = 0 if example == 1: print("Successful") example = 1 但它没有更新,我不确定“如果”是否是最好的说法,但我不知道我还能用什么。我试了一会儿,但也没用。如果你能给我指出正确的方向那就太好了 你不能那样做。下面是一个示例,说明如何使用来实现类似的目标: class Foo:

我试图用Python3编写一个简单的小程序,其中有常量语句,每当变量发生变化时,这些语句将在代码中进一步激活,这样我就不必去搞乱决策。 例如:

example = 0
if example == 1:
    print("Successful")
example = 1

但它没有更新,我不确定“如果”是否是最好的说法,但我不知道我还能用什么。我试了一会儿,但也没用。如果你能给我指出正确的方向那就太好了

你不能那样做。下面是一个示例,说明如何使用来实现类似的目标:

class Foo:
    def __init__(self):
        self._example = 0

    @property
    def example(self):
        return self._example

    @example.setter
    def example(self, value):
        if value == 1:
            print("Successful")
        self._example = value


f = Foo()
f.example = 1

不过,我要警告你,不要过于沉迷于这种模式。这是一种很好的方法,可以最终得到难以调试的代码。

使用基本类型是不可能的。可以通过定义对象和使用描述符来完成。使用observer设计模式,您可以确定触发回调事件所需的规则

在下面的示例中,ObservalEvar启用对属性更改的绑定。因此,“example”属性中的更改将触发对您定义的绑定规则的回调

class ObservableVar:
    def __init__(self):
        self._example = 0
        self._observers = []

    def __setattr__(self, name, value):
        if name == 'example':
            print("Example changed!")
            for callback in self._observers:
                callback(value)            
        super(ObservableVar, self).__setattr__(name, value)

    def bind(self, callback):
        self._observers.append(callback)

    @property
    def example(self):
        return self._example

    @example.setter
    def example(self, value):
        self._example = value


def callback_rule(example):
    if example == 1:
        print("Successful")    

var = ObservableVar()
var.bind(callback_rule)

var.example = 1

处理类似的问题。请记住,变量和它引用的对象之间有区别。在python中,可以说它是一种反模式。