Python中类型注解Literal的实现

 更新时间:2026年07月15日 08:33:14   作者:乱写代码  
本文主要介绍了Python中类型注解Literal的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

查看LangChain源码时,发现Literal

class Document(BaseMedia):
    """Class for storing a piece of text and associated metadata.

    !!! note

        `Document` is for **retrieval workflows**, not chat I/O. For sending text
        to an LLM in a conversation, use message types from `langchain.messages`.

    Example:
        ```python
        from langchain_core.documents import Document

        document = Document(
            page_content="Hello, world!", metadata={"source": "https://example.com"}
        )
        ```
    """

    page_content: str
    """String text."""

    type: Literal["Document"] = "Document"

作用:静态代码检查时,如果type为其他值,即!="Document",会发生报错。 注:在不实际运行程序(不执行代码)的情况下,通过分析源代码的文本结构来找出潜在的错误。

进一步,LangChain 框架中的深层作用

序列化时的“防伪标签” 当 LangChain 将 Document 对象转换成 JSON 字符串时,type: Literal["Document"] 保证了输出的 JSON 里一定会包含这个标签 如下:

print(f"转换格式后:\n{json.dumps(document1_json, ensure_ascii=False, indent=2)}")

# 转换格式后,{
#   "lc": 1,
#   "type": "constructor",
#   "id": [
#     "langchain",
#     "schema",
#     "document",
#     "Document"
#   ],
#   "kwargs": {
#     "metadata": {
#       "author": "张三",
#       "page": 10
#     },
#     "page_content": "LangChain 是一个用于开发大语言模型应用的框架。",
#     "type": "Document" 
#   }
# }

配合 Pydantic 的运行时校验 Pydantic 会直接抛出验证错误,防止脏数据污染系统

例子:

from pydantic import BaseModel
from typing import Literal

class MyClass(BaseModel):
    type: Literal["red"] = "red"

obj = MyClass()
obj.type = "Image"  # ❌ Pydantic 会在运行时抛出 ValidationError

到此这篇关于Python中类型注解Literal的实现的文章就介绍到这了,更多相关Python 类型注解Literal内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • python生成随机唯一id的几种实现方法

    python生成随机唯一id的几种实现方法

    在Python中生成随机唯一ID有多种方法,根据不同的需求场景可以选择最适合的方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2025-07-07
  • Python3 socket同步通信简单示例

    Python3 socket同步通信简单示例

    这篇文章主要介绍了Python3 socket同步通信功能,结合简单实例形式分析了Python socket同步通信客户端与服务器端实现技巧,需要的朋友可以参考下
    2017-06-06
  • 带你了解python装饰器

    带你了解python装饰器

    Python中的装饰器是你进入Python大门的一道坎,不管你跨不跨过去它都在那里。Python中的装饰器的概念经常会让人搞得一头雾水,所以今天就好好来分析一下python中的装饰器
    2017-06-06
  • 1秒钟使用python建立文件服务器的方法步骤

    1秒钟使用python建立文件服务器的方法步骤

    本文主要介绍了1秒钟使用python建立文件服务器的方法步骤,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • 胶水语言Python与C/C++的相互调用的实现

    胶水语言Python与C/C++的相互调用的实现

    这篇文章主要介绍了胶水语言Python与C/C++的相互调用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • Python函数any()和all()的用法及区别介绍

    Python函数any()和all()的用法及区别介绍

    any函数:any(x),只要x中有一个不为空,0,false就返回True,否则返回False。all(x)函数必须x中的所有元素均不为空,0,false才会返回True,否则返回False。接下来通过本文给大家介绍Python函数any()和all()的用法及区别介绍,需要的朋友参考下吧
    2018-09-09
  • python 实现 hive中类似 lateral view explode的功能示例

    python 实现 hive中类似 lateral view explode的功能示例

    这篇文章主要介绍了python 实现 hive中类似 lateral view explode的功能示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • Python 实现将numpy中的nan和inf,nan替换成对应的均值

    Python 实现将numpy中的nan和inf,nan替换成对应的均值

    这篇文章主要介绍了Python 实现将numpy中的nan和inf,nan替换成对应的均值,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • Python可变参数会自动填充前面的默认同名参数实例

    Python可变参数会自动填充前面的默认同名参数实例

    今天小编就为大家分享一篇Python可变参数会自动填充前面的默认同名参数实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • python监控日志中的报错并进行邮件报警

    python监控日志中的报错并进行邮件报警

    这篇文章主要为大家介绍了python监控日志中的报错并进行邮件报警的实现实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06

最新评论