我正在尝试在我的代码中使用ipython提供的traitlets库。假设一个特征是特定类的实例,我如何观察该类成员的值的变化。
示例:
class A:
def init(self,val):
self.value = val
class myApp(HasTraits):
myA = Instance(A,kw={'val':2})
如果'值'我希望调用一个观察方法。对象myA的成员变量已更改..如下所示:
@observe('myA.value')
def onValueChange(self,change):
return
是否可以实施trailets?
答案 0 :(得分:1)
为了观察实例特征值的变化,实例特征的类应该是Hastraits
的子类。
traitlets.observe(* names,** kwargs)
一个装饰者,可以用来观察一个类的特征。
from traitlets import HasTraits, observe, Instance, Int
class A(HasTraits):
value = Int()
def __init__(self, val):
self.value = val
@observe('value')
def func(self, change):
print(change)
class App(HasTraits):
myA = Instance(klass=A, args=(2,))
app = App()
app.myA.value = 1
{'name': 'value', 'old': 0, 'new': 2, 'owner': <__main__.A object at 0x10b0698d0>, 'type': 'change'}
{'name': 'value', 'old': 2, 'new': 1, 'owner': <__main__.A object at 0x10b0698d0>, 'type': 'change'}
修改强>
要将更改处理程序保留在组合类中,您可以动态设置观察者。
请注意,观察到的属性必须是特征的属性。
如果您无权将类A
修改为子类HasTraits
,则可以使用某些类型1}组成一个子类HasTraits
的类。强>魔法。
from traitlets import HasTraits, observe, Instance, Int
class A(HasTraits):
value = Int()
def __init__(self, val):
self.value = val
class App(HasTraits):
myA = Instance(klass=A, args=(2,))
def __init__(self):
super().__init__()
self.set_notifiers()
def set_notifiers(self):
HasTraits.observe(self.myA, func, 'value')
def func(self, change):
print(change)
app = App()
app.myA.value = 1