四川网站建设网站建设首页

苏州丰禾信息科技有限公司 2026/09/09 17:52:52

typing模块里常用的类型注解工具,和 Python 3.9+ 原生类型的对应关系及用法如下,刚好能匹配你之前的答题系统场景:

typing类型Python 3.9+ 原生写法作用说明示例
List[T]list[T]标注元素类型为 T 的列表answers: list[SingleAnswer]
Dict[K, V]dict[K, V]标注键类型 K、值类型 V 的字典score: dict[str, int]
Tuple[T1, T2]tuple[T1, T2]标注固定长度和类型的元组q_and_a: tuple[int, str]
Set[T]set[T]标注元素类型为 T 的集合options: set[str]
Optional[T]`TNone`标注变量可以是 T 类型或 None`remark: strNone = None`
Union[T1, T2]`T1T2`标注变量可以是 T1 或 T2 类型`value: intstr`
Literal[val1, val2]Literal[val1, val2]标注变量只能是 val1、val2 等值option: Literal["A", "B", "C", "D"]
Callable[[ArgT], RetT]Callable[[ArgT], RetT]标注函数类型(参数类型 + 返回值类型)func: Callable[[int], bool]

补充说明

  1. Python 3.9 是个分水岭,之后可以直接用原生的list/dict代替List/Dict,但Literal/Callable这类特殊类型还是要从typing导入(Python 3.10+ 可从typingtypes导入)。
  2. 这些类型注解不影响代码运行,主要是给 IDE 做提示、给开发者看,搭配 Pydantic 时还能用来做数据校验。
# 导入dataclass装饰器 from dataclasses import dataclass # ==================== 普通 class 写法 ==================== class CommonProduct: """普通类,需要手动实现 __init__、__repr__、__eq__ 等魔法方法""" # 1. 手动写初始化方法,接收参数并赋值给实例属性 def __init__(self, name: str, price: float, stock: int): self.name = name self.price = price self.stock = stock # 2. 手动写 __repr__ 方法,控制实例打印时的输出格式(方便调试) def __repr__(self): return f"CommonProduct(name='{self.name}', price={self.price}, stock={self.stock})" # 3. 手动写 __eq__ 方法,定义两个实例的相等判断规则 def __eq__(self, other): # 先判断 other 是否是 CommonProduct 类型 if not isinstance(other, CommonProduct): return False # 当 name、price、stock 都相同时,两个实例才相等 return (self.name == other.name and self.price == other.price and self.stock == other.stock) # ==================== dataclass 写法 ==================== @dataclass # 装饰器自动生成 __init__、__repr__、__eq__ 等方法 class DataProduct: """dataclass 写法,无需手动编写魔法方法,只需定义字段和类型注解""" name: str # 商品名称 price: float # 商品价格 stock: int # 商品库存 # ==================== 测试对比 ==================== if __name__ == "__main__": # 1. 测试普通类 p1 = CommonProduct("T恤", 59.9, 100) p2 = CommonProduct("T恤", 59.9, 100) print("普通类实例打印:", p1) # 调用 __repr__ print("普通类实例相等判断:", p1 == p2) # 调用 __eq__,输出 True print("-" * 50) # 2. 测试 dataclass dp1 = DataProduct("牛仔裤", 129.9, 50) dp2 = DataProduct("牛仔裤", 129.9, 50) print("dataclass实例打印:", dp1) # 自动生成的 __repr__ print("dataclass实例相等判断:", dp1 == dp2) # 自动生成的 __eq__,输出 True

eq它的本质就是比对两个类的值是否相等,当然了只能比对整体,不能单个比对 就算一个不相等,它也是返回false repr它是默认会打印出你传入参数值 方便调试 dataclss会自动创建省得你手动 而且只要是传参的类都建议用dataclass 这样省去写__init__ repr就算地址不同 但是值相同就是一致的 但是他的只是属于类型提示 并不能校验 并不会报错 对于后端写api的建议使用pydantic他会校验传入的值 如果类型不对会进行报错

from pydantic import BaseModel, Field, ValidationError from typing import Literal # 方法1:用Literal直接限定只能是A、B、C、D class SingleAnswer(BaseModel): question_id: int option: Literal["A", "B", "C", "D"] # 只能选这四个选项 # 方法2:用正则表达式校验(适合更灵活的情况,比如允许小写a-d) class SingleAnswerWithRegex(BaseModel): question_id: int option: str = Field(pattern=r"^[A-Da-d]$") # 正则匹配A-D或a-d # 测试正确的情况 correct_ans = SingleAnswer(question_id=1, option="A") print(correct_ans) # 正常输出 # 测试错误的情况(选项为E) try: wrong_ans = SingleAnswer(question_id=2, option="E") except ValidationError as e: print(e) # 会提示选项必须是A、B、C、D中的一个
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

宿迁网站建设襄樊网站建设

基础篇:第一个工作流 “Hello, n8n!”目标: 熟悉 n8n 界面,并学会最重要的技能——如何“看”到你的数据。上一篇我们用命令行“召唤”了n8n,这次我们“温柔”一点,用 

2026/06/30 11:47:27

大型网站建设网站公司建设

Kotaemon时间序列检索:历史事件按时间轴查询在智能代理系统逐渐从“单次响应”迈向“长期交互”的今天,一个关键问题浮现出来:如何让AI记住它做过什么&#x

2026/06/30 10:34:20

北京网站建设南宁网站建设公司

YOLOv8 MAE掩码自编码器预训练方案在工业质检、医疗影像分析等实际场景中,一个普遍存在的困境是:高质量标注数据稀缺而昂贵,但无标签图像却大量存在。比如一

2026/06/30 11:16:24

常州网站建设云南网站建设

5分钟掌握Office部署:Office Tool Plus零基础快速入门指南【免费下载链接】Office-ToolOffice Tool Plus localization proje

2026/06/30 13:42:07

嘉定网站建设网站建设工作

YOLOFuse军事伪装目标识别潜力分析在现代战场上,一个士兵躲在丛林阴影中,身着完美匹配环境的迷彩服——从可见光图像看,他几乎“消失”了。但只要体温存在&#

2026/06/30 13:58:38

贵阳网站建设吉林网站建设

第一章:vLLM启用Open-AutoGLM在大规模语言模型部署场景中,vLLM以其高效的推理调度和内存管理能力成为主流选择。结合Open-AutoGLM这一开源自动对话生

2026/06/30 10:27:20

医院网站建设方案网站建设计

Chrome浏览器全页面截图终极指南:一键捕获完整网页内容【免费下载链接】full-page-screen-capture-chrome-extensionOne-click full

2026/06/30 12:05:29

中国建设银行官方网站网站策划建设

USB集线器硬件架构解析:深入理解多端口扩展系统的底层设计从一个常见问题说起:为什么我的USB设备总在关键时刻掉线?你有没有遇到过这样的场景:正

2026/06/30 10:36:51

网站建设推广网站建设与维护

快速体验打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容:创建一个EXT2FSD使用指南应用,包含:1.分

2026/06/30 12:59:03