dataslots 1.2.0

Creator: bradpython12

Last updated:

Add to Cart

Description:

dataslots 1.2.0

dataslots






Decorator for adding slots
In python 3.7 dataclasses module was introduced for faster class creation (PEP 557).
Unfortunately, there's no support for __slots__ (basic support was added in 3.10). If you want to create more memory
efficient instances, you need to do it by yourself or use @dataslots decorator.
Usage
Simple example
@dataslots
@dataclass
class Point2D:
x: int
y: int

Inheritance
As described in docs, in derived class __dict__ is created, because base class does not have __slots__.
Slots are created from all defined properties (returned by dataclasses.fields() function).
@dataclass
class Base:
a: int


@dataslots
@dataclass
class Derived(Base):
c: int
d: int

Dynamic assignment of new variables
@dataslots(add_dict=True)
@dataclass
class Point2D:
x: int
y: int

point = Point2D(10, 20)
point.length = math.sqrt(point.x ** 2 + point.y ** 2)

Weakref
@dataslots(add_weakref=True)
@dataclass
class Point2D:
x: int
y: int

point = Point2D(10, 20)
r = weakref.ref(point)

Read-only class variables
With __slots__ it's possible to define read-only class variables. When using dataclasses you cannot provide type
for attribute or use typing.ClassVar to declare one.
@dataslots
@dataclass
class A:
x = 5
y: ClassVar[set] = set()

Pickling frozen dataclass
Because of an issue 36424 you need custom __setstate__ method. In dataslots
there is implemented default version, and it is used if decorated class has no __getstate__ and __setstate__
function declared.
Added in 1.0.2
Data descriptors
Data descriptors are supported by
inheritance from DataDescriptor (base class with required interface) or DataslotsDescriptor (class with
additional features to simplify descriptor definition).
Check example directory for basic usage.
Added in 1.1.0
Typing support (PEP 561)
The package is PEP 561 compliant, so you can easily use it with mypy1 and pyright.
1 Due to some issues in mypy not all features are supported correctly (like dataclass alike
interface or descriptors).
Added in 1.2.0
Backport
If you prefer using the newest dataclasses.dataclass interface you can use dataslots.dataclass wrapper
to provide a consistent interface regardless of the python version.
Notice: Wrapper always uses dataslots to make all additional features available and slots=True is obligatory.
Added in 1.2.0
SLSA support
All packages from version 1.2.0 can be verified using SLSA provenance
(dataslots package is compliant with SLSA Level 3).
If you want to verify dataslots before installing, you need to download
SLSA verifier and run:
slsa-verifier verify-artifact \
--provenance-path dataslots.intoto.jsonl \
--source-uri github.com/starhel/dataslots \
--source-tag v${VER} \
${PATH_TO_PACKAGE}

VER is version of package download from PYPI or GH release. Provenance is only available in GH release as PYPI
does not accept jsonl files.
More about __slots__

https://docs.python.org/3/reference/datamodel.html#slots
https://github.com/ericvsmith/dataclasses/issues/28

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Customer Reviews

There are no reviews.