gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 03:37:19 26 4
gpt4 key购买 nike

我不确定我做错了什么。当传递不同类型的输入时,如何防止测试类接受并抛出错误。我正在使用 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__ 方法来解决,您可以在其中检查类型

(基于此 solution 进行了一些更正)

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 字段变成了一个字符串

关于python-3.x - 如果分配了不同的字段类型,如何使使用数据类装饰的类抛出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69365951/

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