Skip to main content

Lightweight dataclass library.

Project description

Easyclasses

Lightweight alternative to dataclasses

Quick Example

from easyclasses import EasyClass

class MyClass(EasyClass):
    a: str
    b: str
    c: str = "test"

print(MyClass("a", "b", c="hi")) # MyClass(a='a', b='b', c='hi')

Installation

Linux/Mac

python3 -m pip install -U easyclasses

Windows

py -3 -m pip install -U easyclasses

Performance

Based on benchmarks.py, easyclasses is over 6x faster than the built-in dataclasses module.

On top of that, it's also outperforms NamedTuple.

Usage

Basics

Easyclasses API is pretty similar to dataclasses.

The main difference between dataclasses is that easyclasses uses a subclass instead of a decorator, like so:

from easyclasses import EasyClass

class MyEasyClass(EasyClass):
    a: str

You can also provide default arguments the same way:

from easyclasses import EasyClass

class MyEasyClass(EasyClass):
    a: str
    b: str = "h"

You can pass subclass arguments to enable or disable certain features:

from easyclasses import EasyClass

class MyEasyClass(EasyClass, eq=False, immutable=True):
    a: str

MyEasyClass("a") == MyEasyClass("a") # False
MyEasyClass("a").a = "test" # TypeError

If you aren't planning on using features like __eq__, then you can use LightEasyClass, which has features like that removed, allowing it to be faster than the normal EasyClass:

from easyclasses import LightEasyClass

class MyEasyClass(LightEasyClass): # works the same
    a: str

Factories

If you need a default argument for a mutable object (such as list or dict), you can use the factory function:

from easyclasses import EasyClass, factory

class MyEasyClass(EasyClass):
    a: list = factory(list)

Validators

You can set a validator using the validator function:

from easyclasses import EasyClass, validator

class MyEasyClass(EasyClass):
    a: str = validator(str, lambda v: v == "hi")

MyEasyClass("hi") # OK
MyEasyClass("a") # AssertionError

You can even use it with factory:

from easyclasses import EasyClass, validator, factory

class MyEasyClass(EasyClass):
    a: list = validator(factory(list), lambda v: v == [1])

MyEasyClass([1, 2]) # AssertionError

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

easyclasses-1.0.1.tar.gz (3.6 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page