全网最适合入门的面向对象编程教程:15 类和对象的Python实现-__slots__魔法方法

通信无线 36 次阅读
摘要:摘要: 本文主要介绍了Python中创建自定义类时不同实例属性保存的基本原理和缺点,介绍了slots魔法方法的基本定义、作用、适用场景和使用方法。 原文链接: FreakStudio的博客 往期推荐: 学嵌入式的你,还不会面向对象??! 全网最适合入门的面向对象编程教程:00 面向对象设计方法导论 全网最适合入门的面向对象编程教程:01 面向对象编程的基本概念 全网最适合入门的面向对象编程教程:0

摘要:

本文主要介绍了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单片机调试原理

肝了半个月,嵌入式技术栈大汇总出炉

电子计算机类比赛的“武林秘籍”

文档和代码获取:

可访问如下链接进行对文档下载:

本文档主要介绍如何使用 Python 进行**面向对象编程,需要读者对 Python 语法和单片机开发具有基本了解。相比其他讲解 Python 面向对象编程的博客或书籍而言,本文档更加详细、侧重于嵌入式上位机应用,以上位机和下位机的常见串口**数据收发、数据处理、动态图绘制等为应用实例,同时使用 Sourcetrail代码软件对代码进行可视化阅读便于读者理解。

相关示例代码获取链接如下:

正文

在Python中,每个类都有实例属性。默认情况下Python⽤⼀个字典(dict属性)来保存⼀个对象的实例属性。这⾮常有⽤,因为它允许我们在运⾏时去设置任意的新属性。然而,对于有着已知属性的⼩类来说,它可能是个瓶颈。这个字典浪费了很多内存。Python不能在对象创建时直接分配多个固定量的内存来保存所有的属性。因此如果你创建许多对象(我指的是成千上万个),它会消耗掉很多内存。

不过还是有一个方法来规避这个问题。这个方法需要使用slots来告诉Python不要使用字典,而且只给一个固定集合的属性分配空间。同时slots可以限制实例的属性,使得我们可以限定某些类只能添加特定属性。

众所周知,Python是一门动态语言。通常,动态语言允许我们在程序运行时给对象绑定新的属性或方法,当然也可以对已经绑定的属性和方法进行解绑定。但是如果我们需要限定自定义类型的对象只能绑定某些属性,可以通过在类中定义slots变量来进行限定。需要注意的是slots的限定只对当前类的对象生效,对子类并不起任何作用。

class SerialClass:    # 限定SerialClass对象只能绑定以下属性    __slots__ = ('dev','_SerialClass__devstate')

使用slots之后,Python内部将不再为实例创建一个字典来维护,而是会使用一个固定大小的数组,这样就节省了大量的空间。通过牺牲了一定的灵活性,保证了性能,这也是slots这个关键字设计的初衷。

相关推荐
评论区

登录后即可参与讨论

立即登录