Slots¶
For performance reasons all tree nodes support slots.
They all sub-class the HasSlots
class, which is the top-level class of pypet
(its direct descendant is HasLogger
, see below).
This class provides an __all_slots__
property
(with the help of the MetaSlotMachine
metaclass)
that lists all existing __slots__
of a class including the inherited ones.
Moreover, via __getstate__
and __setstate__
HasSlots
takes care that all
sub-classes can be pickled with the lowest protocol and don’t need to implement
__getstate__
and __setstate__
themselves even when they have __slots__
.
However, sub-classes that still implement these
functions should call the parent ones via super
. Sub-classes are not required to
define __slots__
. If they don’t, HasSlots
wil also automatically
handle their __dict__
in __getstate__
and __setstate__
.
Logging¶
HasLogger
can be sub-classed to allow per class or even
per instance logging. The logger is initialized via _set_logger()
and is available via
the _logger
attribute.
HasLogger
also takes care that the logger does not get pickled when __getstate__
and
__setstate__
are called.
Thus, you are always advised in sub-classes that also implement these functions
to call the parent ones via super
. HasLogger
is a direct sub-class of HasSlots
.
Hence, support for __slots__
is ensured.