全网最恰当入门的面向对象编程教程:15 类和对象的 Python 实现-__slots__ ...

打印 上一主题 下一主题

主题 872|帖子 872|积分 2616

全网最恰当入门的面向对象编程教程:15 类和对象的 Python 实现-__slots__邪术方法

摘要:

本文主要先容了 Python 中创建自定义类时差别实例属性生存的基本原理和缺点,先容了__slots__邪术方法的基本定义、作用、适用场景和利用方法。
原文链接:

FreakStudio 的博客
往期保举:

学嵌入式的你,还不谋面向对象??!
全网最恰当入门的面向对象编程教程:00 面向对象设计方法导论
全网最恰当入门的面向对象编程教程:01 面向对象编程的基本概念
全网最恰当入门的面向对象编程教程:02 类和对象的 Python 实现-利用 Python 创建类
全网最恰当入门的面向对象编程教程:03 类和对象的 Python 实现-为自定义类添加属性
全网最恰当入门的面向对象编程教程:04 类和对象的Python实现-为自定义类添加方法
全网最恰当入门的面向对象编程教程:05 类和对象的Python实现-PyCharm代码标签
全网最恰当入门的面向对象编程教程:06 类和对象的Python实现-自定义类的数据封装
全网最恰当入门的面向对象编程教程:07 类和对象的Python实现-类型注解
全网最恰当入门的面向对象编程教程:08 类和对象的Python实现-@property装饰器
全网最恰当入门的面向对象编程教程:09 类和对象的Python实现-类之间的关系
全网最恰当入门的面向对象编程教程:10 类和对象的Python实现-类的继承和里氏替换原则
全网最恰当入门的面向对象编程教程:11 类和对象的Python实现-子类调用父类方法
全网最恰当入门的面向对象编程教程:12 类和对象的Python实现-Python利用logging模块输出程序运行日志
全网最恰当入门的面向对象编程教程:13 类和对象的Python实现-可视化阅读代码神器Sourcetrail的安装利用
全网最恰当入门的面向对象编程教程:全网最恰当入门的面向对象编程教程:14 类和对象的Python实现-类的静态方法和类方法
更多出色内容可看:

给你的 Python 加加速:一文速通 Python 并行计算
一文搞懂 CM3 单片机调试原理
肝了半个月,嵌入式技能栈大汇总出炉
电子计算机类比赛的“武林秘籍”
一个MicroPython的开源项目集锦:awesome-micropython,包含各个方面的Micropython工具库
文档和代码获取:

可访问如下链接进行对文档下载:
https://github.com/leezisheng/Doc

本文档主要先容怎样利用 Python 进行面向对象编程,需要读者对 Python 语法和单片机开辟具有基本相识。相比其他解说 Python 面向对象编程的博客或册本而言,本文档更加详细、侧重于嵌入式上位机应用,以上位机和下位机的常见串口数据收发、数据处理、动态图绘制等为应用实例,同时利用 Sourcetrail 代码软件对代码进行可视化阅读便于读者理解。
相关示例代码获取链接如下:https://github.com/leezisheng/Python-OOP-Demo
正文

在 Python 中,每个类都有实例属性。默认环境下 Python ⽤⼀个字典(__dict__属性)来生存⼀个对象的实例属性。这⾮常有⽤,因为它允许我们在运⾏时去设置任意的新属性。然而,对于有着已知属性的⼩类来说,它可能是个瓶颈。这个字典浪费了许多内存。Python 不能在对象创建时直接分配多个固定量的内存来生存所有的属性。因此如果你创建许多对象(我指的是成千上万个),它会消耗掉许多内存。
不过还是有一个方法来规避这个问题。这个方法需要利用__slots__来告诉 Python 不要利用字典,而且只给一个固定集合的属性分配空间。同时__slots__可以限制实例的属性,使得我们可以限定某些类只能添加特定属性。
众所周知,Python 是一门动态语言。通常,动态语言允许我们在程序运行时给对象绑定新的属性或方法,固然也可以对已经绑定的属性和方法进行解绑定。但是如果我们需要限定自定义类型的对象只能绑定某些属性,可以通过在类中定义 slots 变量来进行限定。需要注意的是 slots 的限定只对当前类的对象生效,对子类并不起任何作用。
  1. class SerialClass:
  2.     # 限定SerialClass对象只能绑定以下属性
  3.     __slots__ = ('dev','_SerialClass__devstate')
复制代码
利用__slots__之后,Python 内部将不再为实例创建一个字典来维护,而是会利用一个固定大小的数组,这样就节省了大量的空间。通过牺牲了一定的灵活性,保证了性能,这也是__slots__这个关键字设计的初衷。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

光之使者

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表