返回介绍

19.7 本章小结

发布于 2024-02-05 21:59:47 字数 773 浏览 0 评论 0 收藏 0

本章的话题是动态属性编程。我们首先举了几个实例,定义了几个简单的类,简化处理 JSON 数据源的方式。第一个示例是 FrozenJSON 类,把嵌套的字典和列表转换成嵌套的 FrozenJSON 实例和实例列表。FrozenJSON 类的代码展示了如何使用特殊的 __getattr__ 方法在读取属性时即时转换数据结构。FrozenJSON 类的最后一版展示了如何使用 __new__ 构造方法把一个类转换成一个灵活的对象工厂函数,不受实例本身的限制。

然后,我们把 JSON 源转换成一个 shelve.Shelf 数据库,把序列化的 Record 实例存在里面。第 1 版 Record 类只有几行代码,介绍了“集束”惯用法:使用传给 __init__ 方法的关键字参数,调用 self.__dict__.update(**kwargs) 构建任意属性。这个示例的第 2 版对 Record 类做了扩展:一个是 DbRecord 类,集成数据库操作;另一个是 Event 类,通过特性自动获取所链接的记录。

接着,本章讨论了特性。我们定义的 LineItem 类中有个特性,确保 weight 属性的值不能是对业务没有意义的负数或零。然后,我们深入说明了特性的句法和语义。随后,创建了一个特性工厂函数,在不定义多个读值方法和设值方法的前提下,对 weight 和 price 属性做相同的验证。那个特性工厂函数用到了几个精妙的概念,例如闭包和被特性覆盖的实例属性,提供了优雅的通用方案,代码行数与用手工编码的特性来验证单个属性的一样多。

最后,我们简要说明了如何使用特性处理删除属性的操作,随后概览了 Python 核心语言为支持属性元编程而提供的重要的特殊属性、内置函数和特殊方法。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文