class SlotNonDataclass:
__slots__ = ("foo",)
def __init__(self, foo: str):
# To support frozen derived classes.
object.__setattr__(self, "foo", foo)
@dataclass(frozen=True)
class FrozenDerivingSlotsClass(SlotNonDataclass):
bar: int
def __init__(self, foo: str, bar: int):
# super() without arguments does not work with slots=True,
# as the actual class is different from the one we have here.
super(TestFrozen.FrozenDerivingSlotsClass, self).__init__(foo)
object.__setattr__(self, "bar", bar)
obj = FrozenDerivingSlotsClass("a", 1)
p = pickle.loads(pickle.dumps(obj))
assert obj.foo == p.foo
assert obj.bar == p.bar
Bug report
The following code does not work:
Linked PRs