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

上海临港漕河泾人才有限公司 2026/09/09 20:50:44

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中的一个
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

网站建设多少钱银川网站建设

Kotaemon开源框架发布:基于GPU加速的RAG智能体如何改变企业级对话系统在金融客服的深夜值班室里,一位客户焦急地询问:“我三天前提交的贷款申请现在卡在

2026/06/30 11:44:27

烟台网站建设徐家汇网站建设

告别繁琐配置!使用一锤定音脚本快速部署HuggingFace镜像模型在大模型技术飞速发展的今天,越来越多的研究者和开发者希望快速上手前沿模型——无论是微调一个 Qwen-V

2026/06/30 11:14:24

如何建设网站电器网站建设

终极STL预览神器:告别盲选,让3D模型管理变得简单高效【免费下载链接】stl-thumbThumbnail generator for STL files项目地址: ht

2026/06/30 11:40:26

企业网站建设方案建设厅网站首页

在Windows系统性能优化的众多领域中,驱动程序管理往往是最容易被忽视却又影响深远的关键环节。DriverStore Explorer作为一款专业的驱动存储区管理工具,正

2026/06/30 12:28:01

晋江网站建设邯郸网站建设

还在为找不到合适的多人游戏而烦恼吗?想要与好友在同一台电脑上畅享对战乐趣?Nucleus Co-op这款革命性的分屏工具将彻底改变您的游戏体验!只需一个游戏副

2026/06/30 12:31:01

郴州网站建设淮南网站建设

AhabAssistantLimbusCompany:解放双手的5大智能自动化技巧【免费下载链接】AhabAssistantLimbusCompanyAALC,大概能正常使

2026/06/30 10:26:50

广州网站建设pc网站建设

快速体验打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容:请生成两份实现表格标题行滚动固定的代码:第一份使用传统Java

2026/06/30 14:07:38

网站建设总结江苏省建设厅网站

应用配置与动态加载学习在开发过程中,我们常常会遇到如何更好地管理应用组件和代码的问题。本文将深入探讨应用配置文件的使用以及动态执行代码的相关知识,帮助你更好地理解和运用这些技术。传统开发与配置文件的引

2026/06/30 11:19:24

万州网站建设胶州网站建设

PyTorch-CUDA-v2.6镜像中CUDA_VISIBLE_DEVICES使用技巧在一台拥有四块A100 GPU的服务器上,两位研究员同时运行实验——一人训练视觉模型,

2026/06/30 12:17:31

医院网站建设方案泰州网站建设

工业现场环境下JLink烧录稳定性优化实战指南你有没有遇到过这样的场景:产线正在满负荷运行,几十块板子排队等着烧录固件,结果J-Link突然开始“抽风”——连

2026/06/30 13:13:34