The Property member

The 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

Defining a 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)

Cached properties

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.