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

合肥欧派水泥预制品厂 2026/09/09 18:28:40

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

电器网站建设深圳 网站建设

快速体验打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容:创建一个基于NGINX的视频流媒体服务器配置,支持RTMP和H

2026/06/30 12:46:33

烟台网站建设塘沽网站建设

Path of Building PoE2实战指南:7天从菜鸟到精通【免费下载链接】PathOfBuilding-PoE2项目地址: https://gitcode.com/GitHub

2026/06/30 11:24:55

网站建设深圳模板网站建设

零基础也能做数字人?Linly-Talker开源镜像全解析在电商直播间里,一个面容亲和的虚拟主播正用标准普通话介绍新款护肤品,口型与语音严丝合缝,

2026/06/30 10:53:52

怎样建设网站泸州网站建设

1629个精品书源一键导入指南:彻底告别阅读3.0书荒时代【免费下载链接】最新1629个精品书源.json阅读3.0最新1629个精品书源.json阅读3.0项目地址: https://

2026/06/30 14:14:39

网站建设设计西安网站建设公司

Miniconda-Python3.9 如何快速克隆和导出环境在数据科学、AI 研究或工程开发中,你是否经历过这样的场景:花了整整一天时间配置好一个 Python 环境&#

2026/06/30 11:28:55

河南网站建设石家庄网站建设

Boofuzz模糊测试实战指南:从入门到精通【免费下载链接】boofuzzA fork and successor of the Sulley Fuzzing Framework项目地址

2026/06/30 13:41:06

四川网站建设物流网站建设

从代码比对到听觉体验:如何高效评估TTS模型的真实进化在语音合成技术飞速发展的今天,开发者们早已不再满足于“能说清楚”——我们追求的是“说得自然”、“像真人”、“有情感”。

2026/06/30 12:15:00

免费网站建设湘潭网站建设

Java生成图片验证码的工具类实现 - 通用安全组件开发指南在现代Web应用中,防止自动化脚本恶意注册、暴力破解或爬虫攻击是系统安全的重要一环。图形验证码作为一道简单而有效的防线

2026/06/30 14:03:08

昆明网站建设义乌网站建设

ms-swift 对接 GitHub Wiki 构建动态项目知识库在现代软件研发体系中,知识管理的效率直接决定了团队的响应速度与创新能力。然而现实是,大多数技术团队的知识库

2026/06/30 11:34:56

建设网站教程网站建设步骤

第一章:Dify工作流版本回滚的核心概念在Dify平台中,工作流版本回滚是一项关键的运维能力,用于在配置变更引发异常时快速恢复至稳定状态。该机制依赖于版本控制

2026/06/30 13:17:05