New submission from Shmuel H. <[email protected]>:
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 <[email protected]>
<https://bugs.python.org/issue38444>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com