Skip to content

Fields with single underscore names can mess up dataclasses #98886

Closed
@hauntsaninja

Description

@hauntsaninja

A similar issue to #96151. ericvsmith mentioned this is worth opening an issue for in #98143 (comment)

dataclasses uses variables with single underscore names as part of its implementation. This can cause interesting errors, for example:

from dataclasses import dataclass, field

@dataclass
class X:
    x: int = field(default_factory=lambda: 111)
    _dflt_x: int = field(default_factory=lambda: 222)

X()  # TypeError: '_HAS_DEFAULT_FACTORY_CLASS' object is not callable

The fix is simple: prefix all of these things with __dataclass_, to make name collisions more obviously the user's fault. We already do this for e.g. __dataclass_self__ in the implementation.

Linked PRs

Metadata

Metadata

Assignees

Labels

stdlibPython modules in the Lib dirtype-bugAn unexpected behavior, bug, or error

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions