我有一个冻结的数据类MyData
保存数据。
我想要一个杰出的子类MySpecialData
只能保存长度为1的数据。
这是一个有效的实现。
from dataclasses import dataclass, field
@dataclass(frozen=True)
class MyData:
id: int = field()
data: list[float] = field()
def __len__(self) -> int:
return len(self.data)
@dataclass(frozen=True)
class MySpecialData(MyData):
def __post_init__(self):
assert len(self) == 1
# correctly throws exception
special_data = MySpecialData(id=1, data=[2, 3])
我花了一些时间搞乱__new__
and __init__
,但无法达成有效的解决方案。
该代码有效,但我是一个新手,正在征求有经验的人的意见,如果这是完成此任务的“正确”方法。
任何关于如何更好或更正确地做到这一点的批评或建议将不胜感激。
对于不使用的示例dataclasses
,我想正确的方法是压倒一切的__new__
在子类中。
我怀疑我试图推翻__new__
由于特殊的方式这里失败了dataclasses
作品。
你同意吗?
谢谢您的意见。
不要使用assert
. Use
if len(self) != 1:
raise ValueError
assert
可以通过关闭-O
切换即,如果你像这样运行你的脚本
python -O my_script.py
它不会再引发错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)