dataclasses (Python 3.6 Backport)
The `dataclasses` library is a backport of the standard library `dataclasses` module, designed specifically for Python 3.6. It provides the `@dataclass` decorator and related utilities, enabling simpler creation of data-holding classes without boilerplate. Its current version is 0.8. As it targets a specific, older Python version, its release cadence is stable and infrequent, with no new feature development anticipated.
Warnings
- breaking This library is exclusively for Python 3.6. Installing it on Python 3.7 or newer is redundant and can cause subtle issues if you rely on features specific to this backport or expect it to override the standard library module. Python 3.7+ includes `dataclasses` as a built-in module.
- gotcha When using type hints in Python 3.6 with `dataclasses`, `from __future__ import annotations` is highly recommended. Without it, you may encounter `NameError` for forward references or issues with complex type hints (e.g., `list[str]`, `dict[str, int]`). Alternatively, string literal type hints (e.g., `field: 'MyClass'`) can be used.
- gotcha This backport provides the functionality of `dataclasses` as it existed in Python 3.7. It does not include features introduced in later Python versions, such as `kw_only` or `slots=True` (Python 3.10+).
Install
-
pip install dataclasses
Imports
- dataclass
from dataclasses import dataclass
- field
from dataclasses import field
Quickstart
from __future__ import annotations # Recommended for Python 3.6 type hints
from dataclasses import dataclass, field
@dataclass
class User:
id: int
name: str = "Guest"
email: str | None = None # Using Union syntax (PEP 604) or typing.Optional
tags: list[str] = field(default_factory=list)
# Example usage
user1 = User(id=1, name="Alice")
user2 = User(id=2, email="bob@example.com")
print(user1)
print(user2)
assert user1.name == "Alice"
assert user2.tags == []