attrs icon indicating copy to clipboard operation
attrs copied to clipboard

Way to specify KW_ONLY location in the constructor like in dataclass.KW_ONLY

Open OrHayat opened this issue 1 year ago • 0 comments

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

OrHayat avatar Feb 20 '24 13:02 OrHayat