当前位置: 首页 > 知识库问答 >
问题:

python - pydantic 如何不使用 enum 设置枚举值?

宗政天逸
2024-07-16

是否可以使用 Literal 来实现?

共有1个答案

司空叶五
2024-07-16

在 Pydantic 中,如果你想要设置枚举值但不使用内置的 Enum 类型,确实可以使用 Literal 来达到这个目的。Literal 类型是 Python 的 typing 模块(在 Python 3.8 及更高版本中作为内建类型提供,或在早期版本中使用 typing_extensions 包)的一部分,它可以用来指定一个或多个特定的值。

当在 Pydantic 模型中使用 Literal 时,它会确保该字段只接受指定的字面值之一。以下是一个如何使用 Literal 而不是 Enum 来设置枚举值的示例:

from pydantic import BaseModel, Literal, ValidationError
from typing import Union

class MyModel(BaseModel):
    status: Union[Literal['active'], Literal['inactive'], Literal['pending']]

# 创建一个有效的实例
instance = MyModel(status='active')
print(instance)

# 尝试创建一个带有无效状态的实例将引发 ValidationError
try:
    invalid_instance = MyModel(status='invalid')
except ValidationError as e:
    print(e)

在这个例子中,status 字段只接受 'active''inactive''pending' 这三个值之一。如果尝试使用其他值(如 'invalid'),则会引发 ValidationError

需要注意的是,使用 Literal 时,你通常需要将多个可能的字面量值组合在一个 Union 中(如上例所示),除非你只想要一个固定的值。如果你有许多可能的值,这可能会有些冗长,但它在功能上等同于使用枚举,而无需定义额外的枚举类。

 类似资料:
  • 由于 PHP 本身不支持枚举类型,imi 特别基于注解实现了枚举类。 枚举类定义 继承Imi\Enum\BaseEnum类,然后在类常量上面写上注解@EnumItem,参数是当前常量的文字说明。 <?php namespace ImiDemo\HttpDemo\MainServer\Enum; use Imi\Enum\BaseEnum; use Imi\Enum\Annotation\Enum

  • 本节介绍枚举类型的定义及其使用,需要定义一组相同主题的常量数据时,应该立即想到枚举类型。在学习过程中,需要注意枚举类型的正向映射和反向映射,可以通过编译后的 JavaScript 源码进行分析,为什么可以进行反向映射。 1. 慕课解释 使用枚举我们可以定义一些带名字的常量。TypeScript 支持数字的和基于字符串的枚举。 2. 定义及使用场景 枚举类型弥补了 JavaScript 的设计不足,

  • 创建枚举 import enum class BugStatus(enum.Enum): new = 7 incomplete = 6 invalid = 5 wont_fix = 4 in_progress = 3 fix_committed = 2 fix_released = 1 print('\nMember name: {}'.

  • 问题内容: 有没有一种方法可以在构造时通过Spring IoC设置此类枚举值? 我想做的是在类加载时注入在下面的代码片段中硬编码的值: 假设必须将应用程序部署在Nanos“几乎免费”的德国或法拉利“负担不起”的印度。在这两个国家中,只有三辆汽车(确定性集合),不多不少,因此是一个枚举,但它们的“内部”值可能不同。因此,这是不可变内容的上下文 初始化 的情况。 问题答案: 您是要设置自己吗? 我认为

  • 本文向大家介绍Java(enum)枚举用法详解,包括了Java(enum)枚举用法详解的使用技巧和注意事项,需要的朋友参考一下 概念 enum的全称为 enumeration, 是 JDK 1.5 中引入的新特性。 在Java中,被 enum 关键字修饰的类型就是枚举类型。形式如下: 如果枚举不添加任何方法,枚举值默认为从0开始的有序数值。以 Color 枚举类型举例,它的枚举常量依次为RED:0

  • 本文向大家介绍Java枚举类enum介绍,包括了Java枚举类enum介绍的使用技巧和注意事项,需要的朋友参考一下 枚举类enum是JDK1.5引入的,之前都是用public static final int enum_value来代替枚举类的。枚举类enum是一种特殊的类,它默认继承了类java.lang.Enum。和其它普通类一样,enum同样可以有成员变量、方法、构造器,也可以实现一个或多个

  • 本文向大家介绍一文搞懂JAVA 枚举(enum),包括了一文搞懂JAVA 枚举(enum)的使用技巧和注意事项,需要的朋友参考一下 Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等。 Java 枚举类使用 enum 关键字来定义,各个常量使用逗号 , 来分割。 例如定义一个颜色的枚举类。 以上枚举类 Color 颜

  • 本文向大家介绍秒懂Java枚举类型(enum),包括了秒懂Java枚举类型(enum)的使用技巧和注意事项,需要的朋友参考一下 理解枚举类型 枚举类型是Java 5中新增特性的一部分,它是一种特殊的数据类型,之所以特殊是因为它既是一种类(class)类型却又比类类型多了些特殊的约束,但是这些约束的存在也造就了枚举类型的简洁性、安全性以及便捷性。下面先来看看什么是枚举?如何定义枚举? 枚举的定义