我有一个包含
dataclass
的 list[tuple[str,str]]
,我也希望能够使用 dict[str,str]
进行初始化。从编程上讲是这样的:
from dataclasses import dataclass
@dataclass
class Foobar:
list_of_tuples: list[tuple[str, str]]
def __post_init__(self):
if isinstance(self.list_of_tuples, dict):
self.list_of_tuples = list(self.list_of_tuples.items())
Foobar({"a": "b"})
但是mypy不高兴:
e.py:12: error: Argument 1 to "Foobar" has incompatible type "dict[str, str]"; expected "list[tuple[str, str]]" [arg-type]
mypy 没有意识到我在初始化后直接将
dict
转换为 list[tuple]
。
不幸的是,数据类没有
__pre_init__
。如果可能的话,我也想避免覆盖__init__()
。
有什么提示吗?
如果您想使用
dict
列表初始化对象,请定义一个类方法来显式执行此操作。
from dataclasses import dataclass
@dataclass
class Foobar:
list_of_tuples: list[tuple[str, str]]
@classmethod
def from_dict(cls, d: dict[str, str]):
return cls(list_of_tuples=list(d.items()))
fb = Foobar.from_dict({"a": "b"})