top | item 44065552 (no title) fjasdfas | 9 months ago So are there downsides to just always setting slots=True on all of my python data types? discuss order hn newest itamarst|9 months ago You can't add extra attributes that weren't part of the original dataclass definition: >>> from dataclasses import dataclass >>> @dataclass ... class C: pass ... >>> C().x = 1 >>> @dataclass(slots=True) ... class D: pass ... >>> D().x = 1 Traceback (most recent call last): File "<python-input-4>", line 1, in <module> D().x = 1 ^^^^^ AttributeError: 'D' object has no attribute 'x' and no __dict__ for setting new attributes Most of the time this is not a thing you actually need to do. masklinn|9 months ago Also some of the introspection stops working e.g. vars().If you're using dataclasses it's less of an issue because dataclasses.asdict. monomial|9 months ago I rarely need to dynamically add attributes myself on dataclasses like this but unfortunately this also means things like `@cached_property` won't work because it can't internally cache the method result anywhere. load replies (1)
itamarst|9 months ago You can't add extra attributes that weren't part of the original dataclass definition: >>> from dataclasses import dataclass >>> @dataclass ... class C: pass ... >>> C().x = 1 >>> @dataclass(slots=True) ... class D: pass ... >>> D().x = 1 Traceback (most recent call last): File "<python-input-4>", line 1, in <module> D().x = 1 ^^^^^ AttributeError: 'D' object has no attribute 'x' and no __dict__ for setting new attributes Most of the time this is not a thing you actually need to do. masklinn|9 months ago Also some of the introspection stops working e.g. vars().If you're using dataclasses it's less of an issue because dataclasses.asdict. monomial|9 months ago I rarely need to dynamically add attributes myself on dataclasses like this but unfortunately this also means things like `@cached_property` won't work because it can't internally cache the method result anywhere. load replies (1)
masklinn|9 months ago Also some of the introspection stops working e.g. vars().If you're using dataclasses it's less of an issue because dataclasses.asdict.
monomial|9 months ago I rarely need to dynamically add attributes myself on dataclasses like this but unfortunately this also means things like `@cached_property` won't work because it can't internally cache the method result anywhere. load replies (1)
itamarst|9 months ago
masklinn|9 months ago
If you're using dataclasses it's less of an issue because dataclasses.asdict.
monomial|9 months ago