python3.7 dataclasses 限制字段类型
时间: 2023-06-30 18:03:36 浏览: 206
Python 3.7 中的 dataclasses 模块并没有提供显式的限制字段类型的功能。但你可以利用类型提示和注解来实现这个功能。
例如,假设你有一个 `Person` 类,其中有两个字段 `name` 和 `age`,你希望 `name` 是字符串类型,`age` 是整数类型。你可以这样写:
```python
from dataclasses import dataclass
@dataclass
class Person:
name: str
age: int
```
这里的 `str` 和 `int` 就是类型注解,它们告诉 Python 解释器这两个字段的类型应该是字符串和整数,如果在实例化 `Person` 对象时传入的值不符合类型注解,会抛出类型错误异常。
注意,这种方式只是一种类型提示,而不是严格限制。如果你非常希望字段类型得到严格限制,可以通过自定义 `__post_init__` 方法来实现,如下所示:
```python
from dataclasses import dataclass
@dataclass
class Person:
name: str
age: int
def __post_init__(self):
if not isinstance(self.name, str):
raise TypeError(f"name should be str, but got {type(self.name)}")
if not isinstance(self.age, int):
raise TypeError(f"age should be int, but got {type(self.age)}")
```
这里的 `__post_init__` 方法会在实例化对象后被自动调用,并且会在类型注解的检查后再次进行类型检查。如果类型不符合要求,则抛出类型错误异常。
阅读全文