Python 技巧:使用带字段的数据类(default_factory=)

python 技巧:使用带字段的数据类(default_factory=)

python 的 dataclasses 模块简化了用于存储数据的类的创建。

虽然大多数人都知道基本用法,但有一个鲜为人知的功能字段(default_factory=…)对于处理可变类型中的默认值非常有用。

它是如何运作的

定义数据类时,您可能希望使用可变的默认值,例如列表或字典。

由于默认参数在实例之间共享的方式,直接使用可变默认值可能会导致意外行为。

立即学习“Python免费学习笔记(深入)”;

default_factory 函数提供了一种处理可变默认值的简洁方法。

这是一个简单的例子:

from dataclasses import dataclass, fieldfrom typing import List@dataclassclass Student:    name: str    grades: List[int] = field(default_factory=list)  # Use default_factory for mutable default# Create new Student instancesstudent1 = Student(name="Alice")student2 = Student(name="Bob", grades=[90, 85])# Modify student1's gradesstudent1.grades.append(95)print(student1)  # Output: Student(name='Alice', grades=[95])print(student2)  # Output: Student(name='Bob', grades=[90, 85])# Output:# Student(name='Alice', grades=[95])# Student(name='Bob', grades=[90, 85])

在此示例中,每个新 student 实例的成绩均使用空列表进行初始化。
使用 field(default_factory=list) 确保每个实例都有自己单独的列表,避免共享可变默认值的陷阱。

为什么它很酷

default_factory 功能对于避免可变默认参数的常见问题非常有用。

它有助于确保数据类的每个实例都有自己的默认值,使您的代码更具可预测性并避免与共享状态相关的细微错误。

以上就是Python 技巧:使用带字段的数据类(default_factory=)的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1349620.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月13日 12:58:24
下一篇 2025年12月8日 00:12:26

相关推荐

  • json格式转换方法

    针对 JSON 数据转换,可以采用以下方法:在线转换工具:例如 JSONLint、JSON Parser、JSON Pretty Print 等。编程语言内置函数:如 JavaScript 的 JSON.parse()、Python 的 json.loads()、Java 的 ObjectMappe…

    2025年12月13日
    000
  • 比较优化如何使 Python 排序更快

    在本文中,术语 python 和 cpython(该语言的参考实现)可以互换使用。本文专门讨论 cpython,不涉及 python 的任何其他实现。 python 是一种美丽的语言,它允许程序员用简单的术语表达他们的想法,而将实际实现的复杂性抛在脑后。 它抽象出来的东西之一就是排序。 你可以轻松找…

    2025年12月13日
    000
  • Pandas Pop() 方法 | Python数据分析

    介绍 在本实验中,我们将探索 python pandas 库中的 pop() 方法。 pop() 方法用于删除或删除 dataframe 中的指定项目并返回该项目。如果未找到指定的项目,该方法会引发 keyerror。 虚拟机提示 虚拟机启动完成后,点击左上角切换到notebook选项卡,访问jup…

    2025年12月13日
    000
  • 使用 Mistral 微调您的大型语言模型 (LLM):分步指南

    嘿,人工智能爱好者们! ? 您准备好释放大型语言模型 (llm) 的全部潜力了吗?今天,我们将使用 mistral 作为我们的基础模型,深入了解微调的世界。如果您正在处理自定义 nlp 任务并希望将您的模型提升到一个新的水平,那么本指南适合您! ? ? 为什么要微调法学硕士? 微调允许您根据您的特定…

    2025年12月13日
    000
  • Python 基础 ||数组、类和对象、For 和 While 循环、函数、If else、继承、Lambda

    这是 #100daysofmiva 的第 9 天。请参阅 github 获取代码片段。 今天,我深入研究了 python,重点关注了一些对任何初学者都至关重要的基本概念。本文档是为那些刚刚开始 python 之旅并希望通过实际示例掌握基础知识的人编写的。 如果您是初学者,这是您第一次阅读本文,请考虑…

    2025年12月13日
    000
  • Python 技巧:循环上的 else 子句

    许多 python 程序员都知道 else 关键字可以与 if 语句一起使用,但是您知道它也可以与 for 和 while 循环一起使用吗? 这个鲜为人知的功能可以在某些情况下简化您的代码。 它是如何运作的 在 python 中,您可以将 else 子句附加到 for 或 while 循环。 els…

    2025年12月13日
    000
  • 4 年内驾驭数据分析就业市场

    2024 年数据分析专业人员的就业市场将蓬勃发展,各行业的需求将超过供应。随着企业不断实现运营数字化,对熟练数据分析师的需求从未如此强烈。 行业增长和需求 根据世界经济论坛的数据,数据分析师和科学家是预计未来几年需求量最高的前五名职位。公司越来越依赖数据驱动的见解来做出明智的决策,导致对数据分析专业…

    2025年12月13日
    000
  • 每个开发人员仍然面临的 ython 错误以及如何修复它们)

    由 rupesh sharma 又名 @hackyrupesh 撰写 python 以其简单和美观而成为世界上最流行的编程语言之一。然而,即使到了 2024 年,某些缺陷仍然困扰着开发者。这些问题并不总是由于 python 的弱点造成的,而是由于它的设计、行为或常见的误解导致了意外的结果。在这篇博客…

    2025年12月13日
    000
  • 通过高级 Python 掌握课程提升您的 Python 掌握程度

    你准备好将你的 python 技能提升到一个新的水平了吗? labex 提供的高级 python 掌握课程就是您的最佳选择。这个综合性课程旨在帮助您深入研究 python 的中级应用程序,扩展您的基础知识之外的知识。 在本课程中,您将踏上探索 Python 提供的各种功能和技术的旅程。从操作内置对象…

    2025年12月13日
    000
  • 蟒蛇基础

    蟒蛇python基础python是作者Guido van rossum于1991年开发的python是解释器和编译器语言python 解释器和编译器的区别解释者: 它逐行执行程序 这是一个缓慢的过程 它不会生成任何形式的输出 占用的CPU更少编译器: 它一次运行即可翻译程序 过程很快 它以 .exc…

    2025年12月13日
    000
  • 如何使用 OpenAI 在 Python 中构建简单的聊天机器人 [分步指南]

    创建聊天机器人从未如此简单!借助 openai 强大的 api,您只需几个步骤即可使用 python 构建一个简单而有效的聊天机器人。本指南将引导您完成整个过程,非常适合初学者和开发人员。让我们深入了解吧! ? ? 你将学到什么 在本教程中,您将学习如何: 安装 openai python 库设置您…

    2025年12月13日
    000
  • 评论:Adam Johnson 的《Boost Your Django DX》

    书评很细腻。您不想破坏它,但您也想让潜在读者体验一下所期待的内容。这是提供背景和保持兴趣之间的巧妙平衡。我试图在这篇评论中达到这种平衡,为您提供足够的内容来吸引您,而不透露太多。 一个小背景故事:我第一次从 Djangonaut Space 的好朋友 Tim 那里听说这本书,并将其添加到我的阅读列表…

    2025年12月13日 好文分享
    000
  • 构建对话界面:人工智能聊天机器人和虚拟助理指南

    随着软件开发服务的发展,用户界面中必需且不可避免的部分已成为会话界面。从客户服务到与个人、主管人员和个人帮助的公共关系,交互式人工智能聊天机器人和虚拟个人助理正在彻底改变个人与信息系统的交互方式。对话式界面变得越来越流行,本指南旨在阐述基础知识并提供实用的入门信息。 了解对话界面 对话界面是用户类型…

    2025年12月13日
    000
  • 第一个完全多 GPU 支持和非常先进的带有 Gradio 接口的批量图像字幕生成器 APP 发布

    带有 joycaption 的多 gpu 批量字幕。 joycaption 使用 meta-llama-3.1–8b 和 google/siglip-so400m-patch14–384 以及微调的图像字幕神经网络。 链接:https://www.patreon.com/posts/11061330…

    2025年12月13日 好文分享
    000
  • 使用 Streamlit 将机器学习模型部署为 Web 应用程序

    介绍 机器学习模型本质上是一组用于进行预测或查找数据模式的规则或机制。简单地说(不用担心过于简单化),在 excel 中使用最小二乘法计算的趋势线也是一个模型。然而,实际应用中使用的模型并不那么简单——它们常常涉及更复杂的方程和算法,而不仅仅是简单的方程。 在这篇文章中,我将首先构建一个非常简单的机…

    2025年12月13日
    000
  • 模拟 Python 类

    最近,我必须使用 pytest 为 python 模块编写单元测试。该模块包含一个类,其他类在其构造函数中初始化。 像往常一样,我为此类创建了一个固定装置,以便轻松为每个类方法编写测试。此时,当我尝试模拟构造函数中启动的不同类时,我遇到了一些问题。模拟不起作用,这些类的实例仍在创建中。 经过一些研究…

    2025年12月13日
    000
  • 为 Shutil 添加多线程?!

    讨论shutil.copytree添加多线程 ** 我在 python 上写的讨论:https://discuss.python.org/t/add-multithreading-to-shutil-copytree/62078 ** 背景 shutil 是 python 中一个非常有用的模块。你可…

    2025年12月13日
    000
  • Python 元组、集合和字典 || #f #daysofMiva 日

    今天是 #100daysofmiva 的第 5 天 – 请参阅 github 项目。 我深入研究了 python 中的三种基本数据结构:元组、集合和字典。这些结构对于有效组织和访问数据至关重要,每个结构都具有独特的特征和用例。这是我所学到的详细报告,包括流程、技术细节和代码示例。 1.元…

    2025年12月13日
    000
  • 由于源冻结期导致 AWS DMS 表失败

    我们正在将AWS DMS与db2连接以迁移数据。在源中,我们有大约 8 小时的冻结期,因此我们将停止并恢复 DMS 服务。 一旦我们恢复 DMS,大多数表将恢复,但由于某些更改,某些表仍将被锁定,从而导致“表错误”状态。此后我们无法恢复表,唯一的选项是重新加载。 我们无法定义牌桌列表或这些牌桌的发布…

    2025年12月13日
    000
  • Python 技巧:将列表推导式与条件逻辑结合使用

    python 中的列表推导式是一种创建列表并允许条件逻辑根据特定条件过滤或修改元素的简洁方法。 这可以带来更干净、更易读的代码。 示例:过滤和修改列表项 # Original list of numbersnumbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]# Use …

    2025年12月13日
    000

发表回复

登录后才能评论
关注微信