gpt4 book ai didi

python - 如何强制数据类字段的类型?

转载 作者:行者123 更新时间:2023-12-01 06:51:17 24 4
gpt4 key购买 nike

在此代码中:

import dataclasses

@dataclasses.dataclass
class MyClass:
value: str

obj = MyClass(value=1)

数据类MyClass使用不遵守 value 的值实例化类型。

是否有一种简单的方法(使用装饰器、 dataclass 装饰器或库中的参数)来强制字段的类型,以便我的示例中的最后一行引发 ValueError或类似的东西?以这种方式强制类型有一个主要缺点吗?

最佳答案

您可以声明一个自定义 __post_init__ 方法(请参阅 python's doc )并将所有检查放在那里以强制进行类型检查。该方法可以在父类中声明,以减少更改量。

import dataclasses


@dataclasses.dataclass()
class Parent:
def __post_init__(self):
for (name, field_type) in self.__annotations__.items():
if not isinstance(self.__dict__[name], field_type):
current_type = type(self.__dict__[name])
raise TypeError(f"The field `{name}` was assigned by `{current_type}` instead of `{field_type}`")

print("Check is passed successfully")


@dataclasses.dataclass()
class MyClass(Parent):
value: str


obj1 = MyClass(value="1")
obj2 = MyClass(value=1)

结果:

Check is passed successfully
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 3, in __init__
File "<stdin>", line 7, in __post_init__
TypeError: The field `value` was assigned by `<class 'int'>` instead of `<class 'str'>`

关于python - 如何强制数据类字段的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58992252/

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