実行環境
- Python3.8.6
- dataclasses-json 0.4.5
やりたいこと
dataclasses-jsonを使って、dictからデータクラスに変換したいです。
エラー発生
以下のコードを実行すると、TypeError: 'type' object is not subscriptable
が発生しました。
foo.py
from __future__ import annotations
from dataclasses import dataclass
from dataclasses_json import dataclass_json
@dataclass_json
@dataclass
class Person:
name: str
club: list[str]
d = {"name": "Alice", "club": ["tennis", "soccer"]}
person = Person.from_dict(d)
print(person)
$ python foo.py
Traceback (most recent call last):
File "foo2.py", line 14, in <module>
person = Person.from_dict(d)
File "/home/vagrant/.pyenv/versions/3.8.6/lib/python3.8/site-packages/dataclasses_json/api.py", line 83, in from_dict
return _decode_dataclass(cls, kvs, infer_missing)
File "/home/vagrant/.pyenv/versions/3.8.6/lib/python3.8/site-packages/dataclasses_json/core.py", line 152, in _decode_dataclass
types = get_type_hints(cls)
File "/home/vagrant/.pyenv/versions/3.8.6/lib/python3.8/typing.py", line 1232, in get_type_hints
value = _eval_type(value, base_globals, localns)
File "/home/vagrant/.pyenv/versions/3.8.6/lib/python3.8/typing.py", line 270, in _eval_type
return t._evaluate(globalns, localns)
File "/home/vagrant/.pyenv/versions/3.8.6/lib/python3.8/typing.py", line 518, in _evaluate
eval(self.__forward_code__, globalns, localns),
File "<string>", line 1, in <module>
TypeError: 'type' object is not subscriptable
原因
フィールドclub
の型list[str]
が原因のようです。
型がtyping.List
ならば、エラーは発生しませんでした。
import typing
@dataclass_json
@dataclass
class Person:
name: str
club: typing.List[str]
またPython3.9.7ならエラーは発生しませんでした。