idl*_*dle 2 python field python-3.x python-3.7 python-dataclasses
我正在创建一个带有字段的数据类,我希望只有几个可能的值。我在想这样的事情:
@dataclass
class Person:
name: str = field(default='Eric', choices=['Eric', 'John', 'Graham', 'Terry'])
Run Code Online (Sandbox Code Playgroud)
我知道一种解决方案是验证__post_init__方法中的参数,但是否有使用类似上述语法的更简洁的方法?
python 3.8 引入了一种新类型Literal,可以在这里使用:
from dataclasses import dataclass
from typing import Literal
@dataclass
class Person:
name: Literal['Eric', 'John', 'Graham', 'Terry'] = 'Eric'
Run Code Online (Sandbox Code Playgroud)
类型检查mypy器在正确解释它时没有问题,Person('John')通过,并被Person('Marc')标记为不兼容。请注意,这种提示需要类型检查器才能有用,当您只是运行代码时,它不会自行执行任何操作。
如果您使用的是较旧的 python 版本并且无法升级到 3.8,您还可以Literal通过官方 pip-installable backport package访问该类型typing-extensions,并使用它from typing_extensions import Literal来导入它。
如果您需要在运行时对传递的值进行实际检查,您应该考虑使用pydantic来定义您的数据类。它的主要目标是使用强大的验证引擎扩展类似数据类的结构,该引擎将检查类型提示以强制执行它们,即您认为在__post_init__.
| 归档时间: |
|
| 查看次数: |
894 次 |
| 最近记录: |