文件名称:Trait属性监听-smd贴片型led的封装史上最全
文件大小:7.14MB
文件格式:PDF
更新时间:2024-06-28 07:21:32
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