Skip to content

Add alias as a field() parameter for dataclasses #101192

@tmke8

Description

@tmke8

Feature or enhancement

Add an alias parameter to dataclasses.field() which behaves like alias in attrs.field() (see here and search for "alias"). It has the effect that it changes the corresponding argument name in the synthesized __init__.

Pitch

Since attrs 22.2.0, attrs.field has an alias parameter that does the following:

from attrs import define, field

@define
class C:
    _name: tuple[str, str] = field(alias="name")

    @property
    def full_name(self) -> str:
        return " ".join(self._name)

c = C(name=("John", "Smith"))  # `name` not `_name`
print(c.full_name)

The typical use-case for this is private instance variables as in the above example. But there could be other use-cases as well, like

@define
class C:
    viewport: tuple[int, int] = field(alias="vp")

C(vp=(2, 4))  # constructor uses shorthand

Besides being a useful feature in and of itself, another reason to add this to the standard library is that it would bring dataclasses in line with dataclass_transform which already supports the alias parameter in field(): https://peps.python.org/pep-0681/#field-specifier-parameters . It is currently a bit strange that dataclass_transform has a feature that dataclasses.dataclass doesn't actually have.

Previous discussion

https://discuss.python.org/t/add-alias-as-a-field-parameter-for-dataclasses/22988/1

Metadata

Metadata

Assignees

Labels

stdlibPython modules in the Lib dirtype-featureA feature request or enhancement

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions