From 1b9a0b31e1c64d9daec5e5d06165d351a7675f4f Mon Sep 17 00:00:00 2001 From: Sylvain Corlay Date: Tue, 4 Aug 2015 15:22:19 -0400 Subject: [PATCH] Enable @observe decorator by making ObserveHandler inherit from BaseDescriptor --- traitlets/traitlets.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/traitlets/traitlets.py b/traitlets/traitlets.py index 1297c232..488c3c8f 100644 --- a/traitlets/traitlets.py +++ b/traitlets/traitlets.py @@ -629,6 +629,28 @@ class dict to the newly created class ``cls``. super(MetaHasTraits, cls).__init__(name, bases, classdict) +def observe(*names): + return ObserveHandler(names) + + +class ObserveHandler(BaseDescriptor): + + def __init__(self, names=None): + if names is None: + self.names=[None] + else: + self.names = names + + def __call__(self, func): + self.func = func + return self + + def instance_init(self, inst): + setattr(inst, self.name, self.func) + for name in self.names: + inst.observe(self.func, name=name) + + class HasTraits(py3compat.with_metaclass(MetaHasTraits, object)): """The base class for all classes that have traitlets. """