Git Product home page Git Product logo

dataslots's Introduction

dataslots

PyPI - Python Version PyPI - Status license build status coverage

SLSA OpenSSF Scorecard

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 mypy>=1.1.11 and pyright.

1 Due to some issues in mypy not all features are supported correctly (known bugs: 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__

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.