相关疑难解决方法(0)

Python:更改数据类时验证输入

在Python 3.7中,这些新的“数据类”容器基本上类似于可变的namedtuple。假设我制作了一个要代表一个人的数据类。我可以通过如下__post_init__()函数添加输入验证:

@dataclass
class Person:
    name: str
    age: float

    def __post_init__(self):
        if type(self.name) is not str:
            raise TypeError("Field 'name' must be of type 'str'.")
        self.age = float(self.age)
        if self.age < 0:
            raise ValueError("Field 'age' cannot be negative.")
Run Code Online (Sandbox Code Playgroud)

这样可以通过以下方式提供良好的输入:

someone = Person(name="John Doe", age=30)
print(someone)

Person(name='John Doe', age=30.0)
Run Code Online (Sandbox Code Playgroud)

尽管所有这些错误的输入都会引发错误:

someone = Person(name=["John Doe"], age=30)
someone = Person(name="John Doe", age="thirty")
someone = Person(name="John Doe", age=-30)
Run Code Online (Sandbox Code Playgroud)

但是,由于数据类是可变的,所以我可以这样做:

someone = Person(name="John Doe", age=30)
someone.age = -30
print(someone)

Person(name='John Doe', age=-30)
Run Code Online (Sandbox Code Playgroud)

从而绕过输入验证。

因此, …

python validation python-dataclasses

4
推荐指数
2
解决办法
773
查看次数

标签 统计

python ×1

python-dataclasses ×1

validation ×1