Whilst watching Raymond Hettinger's talk from PyCon 2018, Dataclasses: The code generator to end all code generators - PyCon 2018 an example of how dataclasses implement setattr and delattr on frozen dataclasses was provided:
def __setattr__(self, name, value):
if type(self) is cls or name in ('name', 'address', 'zip_code', 'account_balance', 'active_orders'):
raise FrozenInstanceError(f'Cannot assign to field {name!r}')
super(cls, self).__setattr__(name, value)
def __delattr__(self, name):
if type(self) is cls or name in ('name', 'address', 'zip_code', 'account_balance', 'active_orders'):
raise FrozenInstanceError(f'Cannot delete field {name!r}')
super(cls, self).__delattr__(name)
Is it possible to replicate the behaviour of calling super() inside setattr and delattr without dataclasses to emulate immutability?