New submission from Shmuel H. <shmuelhaz...@gmail.com>:
Currently, `dataclasses.dataclass` will generate `__init__` only where the user has not defined one. However, sometimes, with frozen classes or dataclasses with a lot of members, redefinition of this function is not trivial, especially if the only purpose is to change the default behaviour for only one member: ```python from dataclasses import dataclass @dataclass(frozen=True) class Dataclass: #...big list of members member20: int def __init__(self, member20: str, **kwargs): # self.member20 = int(member20) object.__setattr__(self, "member20", int(member20)) # Now we have to trivially initialize # 20 other members like that :[ ``` My idea is to generate the default `__init__` into `__default_init__` even, if the user has defined their own version. That will allow them to use it like that: ```python from dataclasses import dataclass @dataclass(frozen=True) class Dataclass: #...big list of members member20: int def __init__(self, member20: str, **kwargs): # Oh, that's better :) self.__default_init__(member20=int(member20), **kwargs) ``` Implementing that is pretty trivial (I can do that if this change will be approved). Please let me know what you think about that. ---------- components: Library (Lib) messages: 354437 nosy: Shmuel H. priority: normal severity: normal status: open title: dataclass: always generate default __init__ on __default_init__ type: enhancement versions: Python 3.7, Python 3.8, Python 3.9 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue38444> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com