Python 工匠:案例、技巧与工程实践
朱雷
蓝鲸工具 PaaS 平台负责人
502 人已学习
立即订阅
登录后,你可以任选4讲全文学习
推荐试读
换一换
时长 21:38
免费
课程目录
已完结/共 20 讲
时长 21:38
时长 33:20
时长 24:04
时长 29:57
时长 00:56
时长 00:39
时长 00:36
Python 工匠:案例、技巧与工程实践
15
15
1.0x
00:00/00:00
登录|注册

第 12 章 数据模型与描述符

第 12 章 数据模型与描述符

在 Python 中,数据模型(data model)是个非常重要的概念。我们已经知道,Python 里万物皆对象,任何数据都通过对象来表达。而在用对象建模数据时,肯定不能毫无章法,一定需要一套严格的规则。
我们常说的数据模型(或者叫对象模型)就是这套规则。假如把 Python 语言看作一个框架,数据模型就是这个框架的说明书。数据模型描述了框架如何工作,创建怎样的对象才能更好地融入 Python 这个框架。
也许你还不清楚,数据模型究竟如何影响我们的代码。为此,我们从一个最简单的问题开始:当用 print 打印某个对象时,应该输出什么?
假设我定义了一个表示人的对象 Person
class Person:
"""人
:param name: 姓名
:param age: 年龄
:param favorite_color: 最喜欢的颜色
"""
def __init__(self, name, age, favorite_color):
self.name = name
self.age = age
self.favorite_color = favorite_color
当我用 print 打印一个 Person 对象时,输出如下:
>>> p = Person('piglei', 18, 'black')
>>> print(p)
<__main__.Person object at 0x10d1e4250>
可以看到,打印 Person 对象会输出类名(Person)加上一长串内存地址(0x10d1e4250)。不过,这只是普通对象的默认行为。当你在 Person 类里定义 __str__ 方法后,事情就会发生变化:
class Person:
...
def __str__(self):
return self.name
再试着打印一次对象,输出如下:
>>> print(p)
piglei
>>> str(d) ➊
'piglei'
>>> "I'm {}".format(p)
"I'm piglei"
❶ 除了 print() 以外,str().format() 函数同样也会触发 __str__ 方法
上面展示的 __str__ 就是 Python 数据模型里最基础的一部分。当对象需要当作字符串使用时,我们可以用 __str__ 方法来定义对象的字符串化结果。
虽然从本章标题看来,数据模型似乎是一个新话题,但其实在之前的章节里,我们已经运用过非常多与数据模型有关的知识。表 12-1 整理了其中一部分。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了Python数据模型与描述符的相关知识,包括对象的字符串表示形式、描述符对象的定义、数据类的快速创建等内容。通过实例和案例故事,读者可以更好地理解Python数据模型与描述符的基础知识。文章还介绍了描述符的基本工作原理和使用场景,以及描述符的几个魔法方法的作用。作者通过实际案例展示了对旅游数据进行处理的不同方法,从最初的蛮力尝试到使用集合优化函数,再到对问题的重新思考和利用集合的游戏规则,逐步提升了代码的性能和效率。通过这些内容,读者可以更好地理解描述符的概念和实际应用,以及在实际编程中如何优化代码以提高性能。文章还介绍了使用Python内置模块`dataclasses`来快速定义数据类的方法,通过简化代码,提高了代码的可读性和可维护性。通过对比不同方案的性能和实现方式,读者可以更好地理解如何选择合适的方法来解决问题。整体而言,本文内容丰富,适合想要深入了解Python数据模型与描述符以及代码优化技巧的读者阅读。文章还提到了一些关于Python数据模型的注意事项,例如不要过度依赖`__del__`方法来清理资源,而是推荐显式调用清理方法或实现上下文管理器协议。总的来说,本文内容涵盖了Python数据模型的多个方面,对于想要深入了解Python编程的读者来说,是一篇值得阅读的文章。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Python 工匠:案例、技巧与工程实践》
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部