从强制或检查类型的意义上讲,永远不要遵循dataclass属性的类型提示。大多数情况下,像mypy这样的静态类型检查器都可以完成这项工作,Python在运行时不会这样做,因为它永远不会这样做。
如果要添加手动类型检查代码,请使用以下
__post_init__方法:
@dataclasses.dataclassclass Test: value: int def __post_init__(self): if not isinstance(self.value, int): raise ValueError('value not an int') # or self.value = int(self.value)您可以
dataclasses.fields(self)用来获取
Field指定字段和类型的对象的元组,并在其上循环以针对每个字段自动执行此操作,而无需为每个字段单独编写。
def __post_init__(self): for field in dataclasses.fields(self): value = getattr(self, field.name) if not isinstance(value, field.type): raise ValueError(f'Expected {field.name} to be {field.type}, ' f'got {repr(value)}') # or setattr(self, field.name, field.type(value))


