Bases: type
Metaclass to automatically collect __slots__ for generic pickling
The class __slots__ are collected in reverse MRO order.
Any fields that require special handling are handled through
callbacks specified through the __autoslot_mappers__ class
attribute. __autoslot_mappers__ should be a dict that maps the
field name (either __slot__ or regular __dict__ entry) to a
function with the signature:
mapper(encode: bool, val: Any) -> Any
The value from the object field (or state) is passed to the mapper
function, and the function returns the corrected value.
__getstate__ calls the mapper with encode=True, and
__setstate__ calls the mapper with encode=False.
__autoslot_mappers__ class attributes are collected and combined
in reverse MRO order (so duplicate mappers in more derived classes
will replace mappers defined in base classes).
AutoSlots defines several common mapper functions, including:
Result
This metaclass will add a __auto_slots__ class attribute to the
class (and all derived classes). This attribute is an instance of a
_autoslot_info named 4-tuple:
(has_dict, slots, slot_mappers, field_mappers)
- has_dict: bool
True if this class has a __dict__ attribute (that would need to
be pickled in addition to the __slots__)
- slots: tuple
Tuple of all slots declared for this class (the union of any
slots declared locally with all slots declared on any base class)
- slot_mappers: dict
Dict mapping index in slots to a function with signature
mapper(encode: bool, val: Any) that can be used to encode or
decode that slot
- field_mappers: dict
Dict mapping field name in __dict__ to a function with signature
mapper(encode: bool, val: Any) that can be used to encode or
decode that field value.
-
__init__(name, bases, classdict)[source]
Methods
__init__(name, bases, classdict)
|
|
collect_autoslots(cls)
|
|
encode_as_none(encode, val)
|
__autoslot_mappers__ mapper that will replace fields with None |
mro()
|
Return a type's method resolution order. |
weakref_mapper(encode, val)
|
__autoslot_mappers__ mapper for fields that contain weakrefs |
weakref_sequence_mapper(encode, val)
|
__autoslot_mappers__ mapper for fields with sequences of weakrefs |
Member Documentation
-
class Mixin[source]
Bases: object
Mixin class to configure a class hierarchy to use AutoSlots
Inheriting from this class will set up the automatic generation
of the __auto_slots__ class attribute, and define the standard
implementations for __deepcopy__, __getstate__, and
__setstate__.
-
static encode_as_none(encode, val)[source]
__autoslot_mappers__ mapper that will replace fields with None
This mapper will encode the field as None (regardless of the
current field value). No mapping occurs when restoring a state.
-
static weakref_mapper(encode, val)[source]
__autoslot_mappers__ mapper for fields that contain weakrefs
This mapper expects to be passed a field containing either a
weakref or None. It will resolve the weakref to a hard
reference when generating a state, and then convert the hard
reference back to a weakref when restoring the state.
-
static weakref_sequence_mapper(encode, val)[source]
__autoslot_mappers__ mapper for fields with sequences of weakrefs
This mapper expects to be passed a field that is a sequence of
weakrefs. It will resolve all weakrefs when generating a state,
and then convert the hard references back to a weakref when
restoring the state.
-
mro()
Return a type’s method resolution order.