当前位置: 首页 > wzjs >正文

中国行业网站宁波网站设计公司排名

中国行业网站,宁波网站设计公司排名,宠物网站设计首页模板,网站打开速度进行检测TypedDict和dataclass的优缺点对比 一、生活化比喻 TypedDict 像一本字典册子: 📖 每页有固定栏目(键)✏️ 可以随时添加新便签纸(动态字段)📄 适合记录临时信息 dataclass 像电子表格&#x…

TypedDict和dataclass的优缺点对比

一、生活化比喻

  • TypedDict 像一本字典册子:

    • 📖 每页有固定栏目(键)
    • ✏️ 可以随时添加新便签纸(动态字段)
    • 📄 适合记录临时信息
  • dataclass 像电子表格:

    • 📊 有严格定义的列(属性)
    • 🔒 可以锁定某些列(不可变性)
    • ⚙️ 自带计算功能(方法)

二、最简对比表

TypedDictdataclass
样子字典 {}类实例 ()
用途临时数据收纳盒正式数据档案表
修改随时可改部分禁止修改
检查只查栏目类型严格类型检查

三、超简单代码示例

1. TypedDict 示例 - 记录宠物信息

from typing import TypedDict# 定义宠物信息模板
class PetInfo(TypedDict):name: str    # 必须填写age: int     # 必须填写color: str   # 必须填写# 创建实例
my_cat: PetInfo = {"name": "小白","age": 2,"color": "白色"
}# 添加额外信息(允许但不推荐)
my_cat["favorite_food"] = "鱼罐头"  # ✅ 允许

2. dataclass 示例 - 管理学生档案

from dataclasses import dataclass@dataclass
class Student:name: str     # 学生姓名grade: int    # 年级score: float  # 平均分# 自定义方法:判断是否优秀def is_excellent(self):return self.score >= 90.0# 创建实例
xiaoming = Student(name="小明", grade=3, score=95.5)print(xiaoming.is_excellent())  # 输出:True
# xiaoming.grade = "四年级"      # ❌ 会报错!

四、选择口诀

要灵活,用字典(TypedDict)
要严谨,用表格(dataclass)常变化,用字典
固定式,用表格加方法,用表格
简单存,用字典

五、何时用哪个?

  1. 选TypedDict

    • 📱 处理API返回的JSON数据
    • ⚡ 快速测试临时数据结构
    • 🛠️ 已有字典需要类型提示
  2. 选dataclass

    • 📚 定义系统核心数据模型
    • 🔐 需要防止数据被篡改
    • 🧮 要给数据添加计算功能

具体应用场景代码示例


场景1:网络请求响应处理(TypedDict)

from typing import TypedDict, NotRequired# 定义API响应结构(包含可选字段)
class UserResponse(TypedDict):id: intname: stremail: strage: NotRequired[int]  # 可选字段friends: list[int]     # 嵌套结构# 模拟API请求
def fetch_user_data() -> UserResponse:"""获取用户数据(模拟网络请求)"""return {"id": 123,"name": "张三","email": "zhangsan@example.com","friends": [456, 789],# age 字段可以省略}# 使用示例
user_data = fetch_user_data()
print(f"用户 {user_data['name']} 的好友数量:{len(user_data['friends'])}")# 验证必填字段
def validate_response(data: UserResponse):"""验证必要字段是否存在"""assert "id" in data, "缺少用户ID"assert "name" in data, "缺少用户名"

场景2:用户管理系统(dataclass)

from dataclasses import dataclass
from typing import List@dataclass(frozen=True)  # 设为不可变
class User:user_id: intusername: stremail: strroles: List[str]def is_admin(self) -> bool:"""检查是否是管理员"""return "admin" in self.roles@propertydef email_domain(self) -> str:"""获取邮箱域名"""return self.email.split("@")[-1]# 创建用户实例
admin_user = User(user_id=1,username="sys_admin",email="admin@company.com",roles=["admin", "operator"]
)# 尝试修改会报错(因为设置了frozen=True)
# admin_user.username = "hacker"  # ❌ 报错:dataclasses.FrozenInstanceError# 数据转换示例
def create_user_from_dict(data: dict) -> User:"""从字典创建用户"""return User(user_id=data["id"],username=data["name"],email=data["email"],roles=data.get("roles", ["user"]))

混合使用场景:Web接口开发

from fastapi import FastAPI
from typing import TypedDict
from dataclasses import asdictapp = FastAPI()# API响应使用TypedDict
class ApiResult(TypedDict):success: booldata: dicterror: str# 业务逻辑使用dataclass
@dataclass
class UserProfile:username: strsignup_days: intdef vip_level(self) -> int:return min(self.signup_days // 30, 5)@app.get("/profile/{username}")
def get_profile(username: str) -> ApiResult:"""获取用户资料接口"""# 模拟数据库查询profile = UserProfile(username=username,signup_days=150)return {"success": True,"data": asdict(profile),  # 转换dataclass为字典"error": ""}

http://www.dtcms.com/wzjs/820514.html

相关文章:

  • 建设企业网站的需求分析东营网站建设入门
  • 给金融公司群做网站合法吗深圳建模板网站
  • 襄阳路桥建设集团有限公司网站外贸平台排名
  • 南京做网站公司哪家好网站建设的规划和流程
  • 做课宝官方网站焦作网站建设费用
  • 山东住房和建设庭网站网站建设设计风格描述
  • asp网站实现php栏目哈尔滨seo优化
  • 表白网站建设网站域名 被别人备案
  • 用什么做淘宝客网站好网络营销与策划是什么
  • 杭州网络科技网站企业培训考试平台官网
  • 古田住房与建设局网站中国建设教育网站
  • 视频网站开发价格网站建设论文模板
  • python网站开发环境新版在线天堂网
  • 西安做网站 送百度首页查找网站备案
  • 水产网站源码网站建设技术论文
  • 徐汇科技网站建设WordPress1001无标题
  • 江苏网站设计公司电话自由做图网站
  • .net网站方案网站后台搭建教程
  • 南通网站备案新科网站建设
  • 三金网手机网站如何网站建设自己怎么个人网站
  • 广州服装网站建设青果软件学院教务网络管理系统
  • 全国旅游大型网站建设wordpress主题国外优秀
  • 兼职做网站系统网站设计风格升级
  • 东莞网站建设类岗位知名网站建设加盟合作
  • 怎么做网页版网站wordpress oa
  • 客户要做网站建设话术主流软件开发平台
  • 广州黄埔区开发区建设局网站深圳企业宣传片制作
  • 廉溪区建设局网站四川华鸿建设有限公司网站
  • 产品网站建设方案沈阳黑酷做网站建设优化公司怎么样
  • 网站如何做网络推广织梦pc怎么做手机网站