python-attrs / python-attrs/attrs
Way to specify KW_ONLY location in the constructor like in dataclass.KW_ONLY
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 5.8k
- Forks
- 480
- Avg merge
- 2h 15m
- Merged PRs (30d)
- 2
Description
dataclass in python 3.10 and above got KW_ONLY sentinel value
it allows you to mark where the constructor will start the KWARGS in the class
https://docs.python.org/3/library/dataclasses.html#dataclasses.KW_ONLY
i did not found a way to do this in attrs package
@dataclass()
class Foo():
x:str=field(default="a")
_:KW_ONLY
y:bool
the function signature of the init will be
(x: str = "a", *, y: bool) -> None
the dataclass one will re order the items order in the constructor and handle inheritance properly(if needed)
https://docs.python.org/3/library/dataclasses.html#re-ordering-of-keyword-only-parameters-in-init
from dataclasses import dataclass,KW_ONLY,field
@dataclass
class Base:
x: float = 15.0
_: KW_ONLY
y: int = 0
w: int = 1
@dataclass
class D(Base):
z: int = 10
_: KW_ONLY
t: int = field(kw_only=False, default=0)
function signature:
(x: float = 15, z: int = 10, t: int = 0, *, y: int = 0, w: int = 1) -> None
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Use the linked Python dataclasses.KW_ONLY documentation and the two examples as the behavioral reference. Inspect attrs' constructor generation and existing keyword-only and inheritance tests; done means attrs can express the requested marker behavior, preserves the shown constructor ordering, and has coverage for both examples.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- developer-experience
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100