【文件属性】:
文件名称:Trait属性监听-smd贴片型led的封装史上最全
文件大小:7.14MB
文件格式:PDF
更新时间:2021-06-08 13:34:52
Python 计算 机器学习 数据可视化
6.5 Trait属性监听
HasTraits类的所有对象的所有trait属性都自动支持监听功能。当某个trait属性值发生变化时,Has-
Traits对象会通知所有监听此属性的函数。
监听函数分为静态和动态两种。让我们来看下面这个例子:
1 # -*- coding: utf-8 -*-
2 # filename: traits_listener.py
3 from enthought.traits.api import *
4
5 class Child ( HasTraits ):
6 name = Str
7 age = Int
8 doing = Str
9
10 def __str__(self):
11 return "%s<%x>" % (self.name, id(self))
12
13 # 通知: 当age属性的值被修改时,下面的函数将被运行
14 def _age_changed ( self, old, new ):
15 print "%s.age changed: form %s to %s" % (self, old, new)
16
17 def _anytrait_changed(self, name, old, new):
18 print "anytrait changed: %s.%s from %s to %s" % (self, name, old, new)
19
20 def log_trait_changed(obj, name, old, new):
21 print "log: %s.%s changed from %s to %s" % (obj, name, old, new)
22
23 if __name__ == "__main__":
24 h = Child(name = "HaiYue", age=4)
25 k = Child(name = "KaiYu", age=1)
26 h.on_trait_change(log_trait_changed, name="doing")
Child类有一个age属性,当其值发生变化时,其对应的静态监听函数 _age_changed 将被调用,而
_anytrait_changed则是一个特殊的静态监听函数,HasTraits对象的任何trait属性值的改变都会调用
此函数。
log_trait_changed是一个普通函数。通过h.on_trait_change调用动态地将其与h的doing属性联系起
来,即当h对象的doing属性改变时,log_trait_changed函数将被调用。
在IPython中运行上面的程序:
>>> run traits_listener.py
anytrait changed: <201ba80>.age from 0 to 4
6.5. Trait属性监听 91