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

苏州梓琰金属制品有限公司 2026/09/09 17:58:57

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

网站建设与管理龙岗网站建设公司

如何快速掌握Opus音频格式:新手的完整测试指南【免费下载链接】Opus格式音频测试文件下载探索Opus格式音频的魅力!本项目提供四份高质量的Opus音频测试文件ÿ

2026/06/30 11:55:28

淮安网站建设广州建设网站

Excalidraw 导入/导出兼容性测试报告汇总在技术团队日益依赖可视化协作的今天,一张草图可能承载着系统架构的核心逻辑、产品迭代的关键路径,甚至是一次头脑风暴的全部灵感

2026/06/30 10:29:51

淮安网站建设上海门户网站建设

简介LangChain 1.0作为高层框架,专注于快速原型设计和LLM应用部署;LangGraph 1.0作为底层编排引擎,擅长持久化、有状态的智能体工作流。

2026/06/30 13:44:37

义乌网站建设app网站建设

在信息爆炸的时代,网页数据提取常常面临"大海捞针"的困境——抓取结果中混杂着大量无关信息,真正有价值的内容反而被淹没其中。Maxun作为开源无代码网页数据提

2026/06/30 09:58:17

永州网站建设邯郸网站建设

在产品防护性能的检测中,IP5K防尘测试占据着重要地位。它是评估产品抵御灰尘侵入能力的关键环节,对于众多在复杂环境中使用的产品而言,这一测试的结果直接关系到其

2026/06/30 13:45:37

网站建设心得东莞网站建设公司

Dify平台在金融领域智能问答系统中的应用在金融服务行业,客户对响应速度、信息准确性和合规性的要求日益严苛。一个常见的场景是:一位投资者深夜登录手机银行,询问

2026/06/30 12:30:02

网站建设哪家公司好鄂州网站建设

Miniconda中使用tmux分屏监控多个训练任务在AI模型开发的日常工作中,你是否经历过这样的场景:深夜启动了三组超参数实验,第二天却发现SSH断连导致所

2026/06/30 11:36:56

嘉定网站建设网站企业建设

还在为不同设备需要不同流媒体协议而烦恼吗?安防系统要RTSP、手机播放要HLS、网页实时观看要WebRTC?go2rtc作为一站式摄像头流媒体应用,支持RTS

2026/06/30 10:02:18