The Property member
Property member looks a lot like a normal Python property which makes it
quite different from other members. In particular because there is no way from
atom to know when the value returned by a
Property changes, no
notifications are emitted by default when getting or setting it.
Defining a Property member
Property and the getter, setter and deleter associated to it can
be done in several equivalent manners illustrated below:
from atom.api import Atom, Property, Value def get_v(owner): return owner.v def set_v(owner, value): owner.v = value def del_v(owner): del owner.v class MyAtom(Atom): v = Value() p1 = Property(get_v, set_v, del_v) p2 = Property() def _get_p2(self): return get_v(self) def _set_p2(self, value): set_v(self, value def _del_p2(self): del_v(self) p3 = Property() p3.getter def _get(self): return get_v(self) p3.setter def _set(self, value): set_v(self, value) p3.deleter def _del(self): del_v(self)
For read-only properties, atom offers the option to cache the value
returned by the getter. This can be convenient if the getter performs an
expensive operation. The cache can be reset at a later time by deleting the
property or by calling the
atom.property.Property.reset() method of
the member as illustrated below:
from atom.api import Atom, Property, cached_property class MyAtom(Atom): cp1 = Property(cached=True) def _get_cp1(self): print('Called cp1') @cached_property def cp2(self): print('Called cp2') a = MyAtom() a.cp1 a.cp1 del a.cp1 a.cp1 a.cp2 a.cp2 MyAtom.cp2.reset(a) a.cp2
Running this code will print “Called cp1/2” only twice each.
Notifications from a Property
As mentionned in the introduction,
Property does not fire notifications
upon get/setattr. However it will always fire notifications upon
deletion/reset. To manually fire notifications from a
property, please refer to Manual notifications.