You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
import collections
import dataclasses as dc
@dc.dataclass()
class C:
d: dict
c = C(collections.defaultdict(lambda: 3, {}))
d = dc.asdict(c)
assert isinstance(d['d'], collections.defaultdict)
assert d['d']['a'] == 3
=>
Traceback (most recent call last):
File "boom.py", line 9, in <module>
d = dc.asdict(c)
File "/Users/spinlock/.pyenv/versions/3.7.1/lib/python3.7/dataclasses.py", line 1019, in asdict
return _asdict_inner(obj, dict_factory)
File "/Users/spinlock/.pyenv/versions/3.7.1/lib/python3.7/dataclasses.py", line 1026, in _asdict_inner
value = _asdict_inner(getattr(obj, f.name), dict_factory)
File "/Users/spinlock/.pyenv/versions/3.7.1/lib/python3.7/dataclasses.py", line 1058, in _asdict_inner
for k, v in obj.items())
TypeError: first argument must be callable or None
I understand that it isn't this bit of code's job to support every dict (and list etc.) subclass under the sun but given defaultdict is stdlib it's imo worth supporting explicitly.
The text was updated successfully, but these errors were encountered:
https://bugs.python.org/issue35540 is the official bug report on the stdlib implementation in 3.7, copied below. There's a proposed fix at python/cpython#11361 to special-case
defaultdict
.The text was updated successfully, but these errors were encountered: