gpt4 book ai didi

python - 在数据类的自定义 `__init__` 覆盖中调用生成的 `__init__`

转载 作者:行者123 更新时间:2023-12-04 01:11:16 26 4
gpt4 key购买 nike

目前我有这样的事情:

@dataclass(frozen=True)
class MyClass:
a: str
b: str
c: str
d: Dict[str, str]
...除了 dict,一切都很好s 是可变的,所以我不能用我的类来键入另一个字典。
相反,我想要字段 d成为 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()))

关于python - 在数据类的自定义 `__init__` 覆盖中调用生成的 `__init__`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64775717/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com