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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | f85579ad9e775358370fe7416ce3b2d36bb9fbb619fabba99ea81c19d5e9ebc5 |
|
MD5 | d70911c53f0fd4e3bc8ff860b58bd077 |
|
BLAKE2b-256 | 5cab1c5458b1f8e58ee7d28da0d332c2e43d3351424136376dde0f9be1092121 |