我试图在python 3中创建一个简单的小程序,其中我有一些常量语句,只要变量发生变化就会在代码中进一步激活,这样我就不必弄乱决策了。 例如:
example = 0
if example == 1:
print("Successful")
example = 1
但它没有更新,我不确定是否'如果'对此最好的说法,但我不知道我还能用什么。我尝试了,但它也没有用。如果你能指出我正确的方向,那将是伟大的。
答案 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