每次更改变量时如何创建if语句触发器(Python3)

时间:2017-05-17 03:14:10

标签: python python-3.x

我试图在python 3中创建一个简单的小程序,其中我有一些常量语句,只要变量发生变化就会在代码中进一步激活,这样我就不必弄乱决策了。 例如:

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

但它没有更新,我不确定是否'如果'对此最好的说法,但我不知道我还能用什么。我尝试了,但它也没有用。如果你能指出我正确的方向,那将是伟大的。

2 个答案:

答案 0 :(得分:3)

你不能这样做。以下是如何使用descriptors来实现类似功能的示例:

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

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

答案 1 :(得分:0)

原始类型无法实现。它可以通过定义对象和使用描述符来完成。使用观察者设计模式,您可以确定触发回调事件所需的规则。

在下面的示例中,ObservableVar可以绑定到属性更改。因此,“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