如何使类装饰使用数据类抛出错误,如果不同的字段类型分配?



我不知道我做错了什么。如何防止Test类接受&当传入不同类型的输入时抛出错误。我正在使用Python 3.9.2

from dataclasses import dataclass, fields

@dataclass
class Test:
a: str = 'a'
b: int = 1

t = Test(2, 'b')
print(fields(t))
print(type(t.a))
print(type(t.b))
# output
# (venv) D:Playground>python dataClassesTest.py
# (Field(name='a',type=<class 'str'>,default='a',default_factory=<dataclasses._MISSING_TYPE object at 0x00000232952D5880>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),_field_type=_FIELD), Field(name='b',type=<class 'int'>,default=1,default_factory=<dataclasses._MISSING_TYPE object at 0x00000232952D5880>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),_field_type=_FIELD))
# <class 'int'>
# <class 'str'>

这可以通过在您的dataclass中添加__post_init__方法来解决,您可以检查类型

(基于此解决方案,一些修正)

def __post_init__(self):
for f in fields(type(self)):
if not isinstance(getattr(self, f.name), f.type):
current_type = type(getattr(self, f.name))
raise TypeError(f"The field `{f.name}` was assigned by `{current_type}` instead of `{f.type}`")

请注意,当导入

时,此代码不起作用。
from __future__ import annotations

因为dataclasses.Field中的type字段变成了字符串

相关内容

  • 没有找到相关文章

最新更新