🗂 Take the edge off `dataclass` 🗂
Project description
🗂 datacls
: take the edge off dataclass
🗂
dataclasses
is almost perfect.
datacls
is a tiny, thin wrapper around dataclass.dataclasses
making it
a bit more self-contained, reflective, and saving a bit of typing.
datacls
is exactly like dataclass
, except:
-
Adds three new instance methods:
asdict()
,astuple()
,replace()
, and one new class method,fields()
, all taken from thedataclasses
module -
xmod
-ed for less cruft (sodatacls
is the same asdatacls.dataclass
) -
The default class is
datacls.immutable
wherefrozen=True
.
Example
import datacls
@datacls
class One:
one: str = 'one'
two: int = 2
three: dict = datacls.field(dict)
# `One` has three instance methods: asdict(), astuple(), replace()
o = One()
assert o.asdict() == {'one': 'one', 'two': 2, 'three': {}}
import dataclasses
assert dataclasses.asdict(o) == o.asdict()
assert o.astuple() == ('one', 2, {})
o2 = o.replace(one='seven', three={'nine': 9})
assert o2 == One('seven', 2, {'nine': 9})
# `One` has one new class method: fields()
assert [f.name for f in One.fields()] == ['one', 'two', 'three']
# @datacls is immutable.
try:
o.one = 'three'
except AttributeError:
pass
else:
raise AttributeError('Was mutable!')
# Usec @datacls.mutable or @datacls(frozen=False)
# for mutable classes
@datacls.mutable
class OneMutable:
one: str = 'one'
two: int = 2
three: Dict = datacls.field(dict)
om = OneMutable()
om.one = 'three'
assert str(om) == "OneMutable(one='three', two=2, three={})"
# These four new methods won't break your old dataclass by mistake:
@datacls
class Overloads:
one: str = 'one'
asdict: int = 1
astuple: int = 1
fields: int = 1
replace: int = 1
o = Overloads()
assert ov.one == 'one'
assert ov.asdict == 1
assert ov.astuple == 1
assert ov.fields == 1
assert ov.replace == 1
# You can still access the methods as functions on `datacls`:
assert (
datacls.asdict(ov) ==
{'asdict': 1, 'astuple': 1, 'fields': 1, 'one': 'one', 'replace': 1}
)
API Documentation
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
datacls-4.7.0.tar.gz
(3.8 kB
view details)
Built Distribution
File details
Details for the file datacls-4.7.0.tar.gz
.
File metadata
- Download URL: datacls-4.7.0.tar.gz
- Upload date:
- Size: 3.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.5.0 CPython/3.10.11 Darwin/21.6.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 548f65f3c7c28742d6c051e55799e51f84cc1027743257d388b77ba2ed86ba3f |
|
MD5 | 50f896dfb7f9ff9d6ddc9882deb371c3 |
|
BLAKE2b-256 | 8c348369cd7ca367b98e2e972c7b44c151e8bb454432b5a85ecadbf6b3b4c826 |
File details
Details for the file datacls-4.7.0-py3-none-any.whl
.
File metadata
- Download URL: datacls-4.7.0-py3-none-any.whl
- Upload date:
- Size: 4.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.5.0 CPython/3.10.11 Darwin/21.6.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d7ee2d301810d4b5f5e779cb29f98ee8fef6b54625622cbe4fd5afbbd764645a |
|
MD5 | 0e07014e82bfe9c1ba4b293fad389d1c |
|
BLAKE2b-256 | bb44808c0c974dbfe958ab3dc4c7e22a5c31a802df3d21aa2daa5994b1f398e5 |