python中__slots__节约内存的具体做法


Posted in Python onJuly 04, 2021

说明

1、利用_slots__类属性,可以将实例属性存储在元zu中,大大节省了存储空间。

2、所有属性都必须定义为__slots__元组,子类还必须定义__slots__。

实例如果支持弱引用,需要在__weakref中添加__slots__。

实例

class Vector2d:
    __slots__ = ('__x', '__y')
 
    typecode = 'd'

知识点扩展:

__slots__

​ 如果在一个类中定义了__slots__属性,那么这个类的实例将不会拥有__dict__属性,没有__dict__的实例也就不能添加实例属性了。简单来说,__slots__的作用就是阻止类在实例化时为实例分配__dict__属性,限制该实例能添加的属性。

作用

​ 通常情况下实例使用__dict__来存储自己的属性,它允许实例动态地添加或删除属性。然而,对一些在编译期就已经知道有什么变量的类或者不允许动态添加变量的类来说,它们并不需要动态地添加变量。如果想要限制实例属性,不想让它动态添加属性怎么办?比如我们只允许对A的实例添加name和age属性。

​ 为了达到上述目的,Python允许在定义class的时候,定义一个__slots__变量,来限制该class的实例能添加的属性。

class A(object):
  __slots__ = ('age','name')
a = A()
a.name = 'xiaoming'
a.age = 10
a.id = 123456 #error  AttributeError: 'A' object has no attribute 'id'

由于id不在__slots__中,所以实例不能添加id属性。任何试图给实例添加一个其名不在__slots__中的属性都将触发AttributeError异常。

以上就是python中__slots__节约内存的具体做法的详细内容,更多关于python中__slots__如何节约内存的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
详解Python中的各种函数的使用
May 24 Python
使用pdb模块调试Python程序实例
Jun 02 Python
用Python删除本地目录下某一时间点之前创建的所有文件的实例
Dec 14 Python
python 使用poster模块进行http方式的文件传输到服务器的方法
Jan 15 Python
基于腾讯云服务器部署微信小程序后台服务(Python+Django)
May 08 Python
python模拟菜刀反弹shell绕过限制【推荐】
Jun 25 Python
详解Python 中sys.stdin.readline()的用法
Sep 12 Python
python numpy存取文件的方式
Apr 01 Python
tensorflow实现在函数中用tf.Print输出中间值
Jan 21 Python
python+opencv实现移动侦测(帧差法)
Mar 20 Python
python框架flask入门之环境搭建及开启调试
Jun 07 Python
Python内置包对JSON文件数据进行编码和解码
Apr 12 Python
python中Matplotlib绘制直线的实例代码
Jul 04 #Python
C站最全Python标准库总结,你想要的都在这里
Python实现列表拼接和去重的三种方式
Jul 02 #Python
简单且有用的Python数据分析和机器学习代码
Jul 02 #Python
python常见的占位符总结及用法
Jul 02 #Python
Python合并pdf文件的工具
python实现剪贴板的操作
You might like
Smarty Foreach 使用说明
2010/03/23 PHP
PHP 防恶意刷新实现代码
2010/05/16 PHP
PHP中类与对象功能、用法实例解读
2020/03/27 PHP
PHP优化之批量操作MySQL实例分析
2020/04/23 PHP
jQuery的链式调用浅析
2010/12/03 Javascript
jQuery EasyUI API 中文文档 - TimeSpinner时间微调器
2011/10/23 Javascript
jQuery处理xml格式的返回数据(实例解析)
2013/11/28 Javascript
Jquery实现点击按钮,连续地向textarea中添加值的实例代码
2014/03/08 Javascript
基于jquery实现的自动补全功能
2015/03/12 Javascript
javascript正则表达式基础知识入门
2015/04/20 Javascript
jQuery EasyUI实现右键菜单变灰不可用效果
2015/09/24 Javascript
详解angular2采用自定义指令(Directive)方式加载jquery插件
2017/02/09 Javascript
Three.js获取鼠标点击的三维坐标示例代码
2017/03/24 Javascript
vue.js指令和组件详细介绍及实例
2017/04/06 Javascript
React styled-components设置组件属性的方法
2018/08/07 Javascript
vue使用showdown并实现代码区域高亮的示例代码
2019/10/17 Javascript
Vue.js页面中有多个input搜索框如何实现防抖操作
2019/11/04 Javascript
[01:01:36]Optic vs paiN 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
[01:59][TI9趣味视频] 全明星赛奖励
2019/08/23 DOTA
在Mac OS系统上安装Python的Pillow库的教程
2015/11/20 Python
Python基础中所出现的异常报错总结
2016/11/19 Python
Python打印“菱形”星号代码方法
2018/02/05 Python
python爬虫神器Pyppeteer入门及使用
2019/07/13 Python
使用Python获取当前工作目录和执行命令的位置
2020/03/09 Python
浅谈对python中if、elif、else的误解
2020/08/20 Python
图解Python中深浅copy(通俗易懂)
2020/09/03 Python
使用SVG实现提示框功能的示例代码
2020/06/05 HTML / CSS
台湾SHOPRO购物行家:亚洲首创影视.3C.家电.优质购物平台
2018/05/07 全球购物
德国自行车商店:Tretwerk
2019/06/21 全球购物
在网络中有两台主机A和B,并通过路由器和其他交换设备连接起来,已经确认物理连接正确无误,怎么来测试这两台机器是否连通?如果不通,怎么来判断故障点?怎么排
2014/01/13 面试题
活动策划邀请函
2014/02/06 职场文书
中小学校园安全广播稿
2014/09/29 职场文书
导游词之广州陈家祠
2019/10/21 职场文书
使用css样式设计一个简单的html登陆界面的实现
2021/03/30 HTML / CSS
Python insert() / append() 用法 Leetcode实战演示
2021/03/31 Python
springboot 自定义配置 解决Boolean属性不生效
2022/03/18 Java/Android