-
-
Notifications
You must be signed in to change notification settings - Fork 32.4k
Closed as not planned
Labels
stdlibPython modules in the Lib dirPython modules in the Lib dirtype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Description
Bug report
Bug description:
Using super()
in __post_init__
on a dataclass with slots fails.
This code:
from dataclasses import dataclass
@dataclass(slots=True)
class Base:
def __post_init__(self):
pass
@dataclass(slots=True)
class Thing(Base):
a: int
b: int
c: int = 0
def __post_init__(self):
self.c = self.a + self.b
super().__post_init__()
t = Thing(1,3)
Produces this exception:
Traceback (most recent call last):
File "C:\Users\michael.foord\Code\one-touch-switch-service\example.py", line 18, in <module>
t = Thing(1,3)
^^^^^^^^^^
File "<string>", line 6, in __init__
File "C:\Users\michael.foord\Code\one-touch-switch-service\example.py", line 16, in __post_init__
super().__post_init__()
^^^^^^^
TypeError: super(type, obj): obj must be an instance or subtype of type
The fix is to use Python 2 style super(Class, self).__post_init__()
.
CPython versions tested on:
3.11
Operating systems tested on:
Windows
Linked PRs
Hnasar and spiqueras
Metadata
Metadata
Assignees
Labels
stdlibPython modules in the Lib dirPython modules in the Lib dirtype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error