Python Data Classes
Project description
Python Data Classes support Python 2 and 3 with many human-friendly features.
This project has been tested in Python 2.7 and Python 3.4+. It is not related to the dataclasses module introduced in Python 3.7.
Feature Support
Python Data Classes generally support
untyped data, typed data, and typed data list
arbitrary attribute names in the dictionary input
no python attribute naming conflict or pollution
lazy and auto object creation on-the-fly
lazy loading of the dict input (default: enabled)
synchronous updates of the dict input (default: disabled)
Getting Started
Install the Python Data Classes
pip install pydataclasses
Create the Python Data Classes
from pydataclasses import DataClass
class TT(DataClass):
attr = None
class ONCE(DataClass):
data = None
class TWICE(ONCE):
tear = TT
tears = [TT]
def __init__(self, *args, **kwargs):
super(TWICE, self).__init__(*args, **kwargs)
self.pair = TWICE
self.pairs = [TWICE]
Play with the Python Data Classes
old_data = 'hello'
new_data = 'world'
old_dict = {'data': old_data}
new_dict = {'data': new_data}
# lazy and auto object creation on-the-fly
twice = TWICE()
assert twice.pairs[1].tear.attr is None
twice.pairs[1].tear.attr = old_data
assert old_data == twice.pairs[1].tear.attr
# lazy loading of the dict input (default: enabled)
twice = TWICE(old_dict)
assert old_data == twice.data
assert old_dict == twice.__as_dict__(dict, 0)
# synchronous updates of the dict input (default: disabled)
assert old_dict != new_dict
twice = TWICE(old_dict, __sync__=True)
twice.data = new_data
assert old_dict == new_dict
Best Practices
Please
read and refer to pydataclasses.utils.JSONData as an example
put a tailored subclass between pydataclasses and your project
write (or copy from pydataclasses) as many tests as possible for this subclass
from pydataclasses import DataClass
class ProjectDataClass(DataClass):
def as_dict(self, dict_class=OrderedDict):
return self.__as_dict__(dict_class, 0)
Release History
1.0.1 (2019-05-04)
Bump the version again
1.0.1 (2019-05-04)
Bump the version
1.0.0 (2019-05-04)
Support the annotations of native dataclasses
0.0.2 (2018-08-28)
Fix the python packaging issues
Add the tox, pylint, pytest, coverage tools
0.0.1 (2018-08-26)
Birthday
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
Built Distribution
File details
Details for the file pydataclasses-1.0.2.tar.gz
.
File metadata
- Download URL: pydataclasses-1.0.2.tar.gz
- Upload date:
- Size: 18.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a9ee3de69d18c0a46ab790a844154b2ed8f4b109176b0590b456441305bcc2de |
|
MD5 | 65adf90808ae3c5dc5c546bf9ca1a320 |
|
BLAKE2b-256 | 82e79a8d3fdca8b9c1a4b349f56d534b65b6b90b917aacc705eaf67a8505308e |
File details
Details for the file pydataclasses-1.0.2-py3-none-any.whl
.
File metadata
- Download URL: pydataclasses-1.0.2-py3-none-any.whl
- Upload date:
- Size: 13.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | bdf1da95e3f6e24ad02cf3f3da91767c08e1fd7f51d845a08bb543d319ad6765 |
|
MD5 | 50fdf8224da9419e3e253af2c78f4103 |
|
BLAKE2b-256 | 7f4773090af1542892989d4ae181a60fc31f83d0472003f94f2778e5beca778c |