Skip to main content
Python Software Foundation 20th Year Anniversary Fundraiser  Donate today!

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 ==
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) = new_data
assert old_dict == new_dict

Best Practices


  • 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.

Files for pydataclasses, version 1.0.2
Filename, size File type Python version Upload date Hashes
Filename, size pydataclasses-1.0.2-py3-none-any.whl (13.0 kB) File type Wheel Python version py3 Upload date Hashes View
Filename, size pydataclasses-1.0.2.tar.gz (18.8 kB) File type Source Python version None Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring DigiCert DigiCert EV certificate Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page