[Python-Dev] Should the dataclass frozen property apply to subclasses?

2018年2月21日 22:59:30 -0800

When working on the docs for dataclasses, something unexpected came up. If a 
dataclass is specified to be frozen, that characteristic is inherited by 
subclasses which prevents them from assigning additional attributes:
 >>> @dataclass(frozen=True)
 class D:
 x: int = 10
 >>> class S(D):
 pass
 >>> s = S()
 >>> s.cached = True
 Traceback (most recent call last):
 File "<pyshell#49>", line 1, in <module>
 s.cached = True
 File 
"/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/dataclasses.py",
 line 448, in _frozen_setattr
 raise FrozenInstanceError(f'cannot assign to field {name!r}')
 dataclasses.FrozenInstanceError: cannot assign to field 'cached'
Other immutable classes in Python don't behave the same way:
 >>> class T(tuple):
 pass
 >>> t = T([10, 20, 30])
 >>> t.cached = True
 >>> class F(frozenset):
 pass
 >>> f = F([10, 20, 30])
 >>> f.cached = True
 >>> class B(bytes):
 pass
 >>> b = B()
 >>> b.cached = True
Raymond
_______________________________________________
Python-Dev mailing list
[email protected]
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to