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 details)

Uploaded Source

File details

Details for the file easyclasses-1.0.1.tar.gz.

File metadata

  • Download URL: easyclasses-1.0.1.tar.gz
  • Upload date:
  • Size: 3.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.5

File hashes

Hashes for easyclasses-1.0.1.tar.gz
Algorithm Hash digest
SHA256 f85579ad9e775358370fe7416ce3b2d36bb9fbb619fabba99ea81c19d5e9ebc5
MD5 d70911c53f0fd4e3bc8ff860b58bd077
BLAKE2b-256 5cab1c5458b1f8e58ee7d28da0d332c2e43d3351424136376dde0f9be1092121

See more details on using hashes here.

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