目前我有这样的事情:
@dataclass(frozen=True)
class MyClass:
a: str
b: str
c: str
d: Dict[str, str]
...除了dict
s是可变的之外,这一切都很好,所以我不能使用我的班级去键入另一个字典。
相反,我希望fieldd
类似于a FrozenSet[Tuple[str, str]]
,但是我仍然希望有人构造我的类的实例,以便能够在构造函数上传递字典,因为这更加直观。
所以我想做些类似的事情
@dataclass(frozen=True)
class MyClass:
a: str
b: str
c: str
d: FrozenSet[Tuple[str, str]] = field(init=False)
def __init__(self, a, b, c, d: Dict[str, str]):
self.original_generated_init(a, b, c) # ???
object.setattr(self, 'd', frozenset(d.items())) # required because my dataclass is frozen
我该如何实现?另外,是否有更优雅的方法可以实现相同目的?
您可以使用InitVar
并分配给d
在__post_init__
:
@dataclass(frozen=True)
class MyClass:
a: str
b: str
c: str
d: FrozenSet[Tuple[str, str]] = field(init=False)
d_init: InitVar[Dict[str, str]]
def __post_init__(self, d_init):
object.__setattr__(self, 'd', frozenset(d_init.items()))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句