Python类中的魔法方法之 __slots__原理解析


Posted in Python onAugust 26, 2019

在类中每次实例化一个对象都会生产一个字典来保存一个对象的所有的实例属性,这样非常的有用处,可以使我们任意的去设置新的属性。

每次实例化一个对象python都会分配一个固定大小内存的字典来保存属性,如果对象很多的情况下会浪费内存空间。

可通过__slots__方法告诉python不要使用字典,而且只给一个固定集合的属性分配空间

class Foo(object):
 __slots__ = ("x","y","z")

 def __init__(self,x,y):
  self.x = x
  self.y = y
  self.z = None

 def tell_info(self,name):
  return getattr(self,name)

c = Foo(10,20)
# 设置和获取__slots__中设置的可访问实例属性
print(c.tell_info("x"))  # 结果:10

c.z=50
print(c.tell_info("z")) # 结果:50

# 设置一个不在__slots__中存在的属性,会报错
c.e = 70 # AttributeError: 'Foo' object has no attribute 'e'

# 访问对象.__dict__ 也会直接报错
print(c.__dict__) # AttributeError: 'Foo' object has no attribute '__dict__'

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用Python开发windows GUI程序入门实例
Oct 23 Python
Python 正则表达式(转义问题)
Dec 15 Python
浅谈Python中用datetime包进行对时间的一些操作
Jun 23 Python
Python中使用asyncio 封装文件读写
Sep 11 Python
python机器学习实战之最近邻kNN分类器
Dec 20 Python
python简单贪吃蛇开发
Jan 28 Python
python print出共轭复数的方法详解
Jun 25 Python
python shutil文件操作工具使用实例分析
Dec 25 Python
如何基于pythonnet调用halcon脚本
Jan 20 Python
使用Pycharm分段执行代码
Apr 15 Python
k-means 聚类算法与Python实现代码
Jun 01 Python
基于python代码批量处理图片resize
Jun 04 Python
pywinauto自动化操作记事本
Aug 26 #Python
Python 实现的 Google 批量翻译功能
Aug 26 #Python
python自动化工具之pywinauto实例详解
Aug 26 #Python
Python3简单爬虫抓取网页图片代码实例
Aug 26 #Python
python 数据提取及拆分的实现代码
Aug 26 #Python
Python3 使用pillow库生成随机验证码
Aug 26 #Python
python excel转换csv代码实例
Aug 26 #Python
You might like
PHP基础学习之流程控制的实现分析
2013/04/28 PHP
php中0,null,empty,空,false,字符串关系的详细介绍
2013/06/20 PHP
PHP对象相互引用的内存溢出实例分析
2014/08/28 PHP
php之curl实现http与https请求的方法
2014/10/21 PHP
php中bind_param()函数用法分析
2017/03/28 PHP
javascript event 事件解析
2011/01/31 Javascript
JS无限极树形菜单,json格式、数组格式通用示例
2013/07/30 Javascript
推荐一个自己用的封装好的javascript插件
2015/01/29 Javascript
js实现全国省份城市级联下拉菜单效果代码
2015/09/07 Javascript
Bootstrap每天必学之表单
2015/11/23 Javascript
vue2.0使用Sortable.js实现的拖拽功能示例
2017/02/21 Javascript
node.js 发布订阅模式的实例
2017/09/10 Javascript
推荐VSCode 上特别好用的 Vue 插件之vetur
2017/09/14 Javascript
详解node nvm进行node多版本管理
2017/10/21 Javascript
vue3.0 CLI - 2.6 - 组件的复用入门教程
2018/09/14 Javascript
关于微信小程序map组件z-index的层级问题分析
2019/07/09 Javascript
微信小程序实现二维码签到考勤系统
2020/01/16 Javascript
vue-cli创建的项目中的gitHooks原理解析
2020/02/14 Javascript
Vue路由的模块自动化与统一加载实现
2020/06/05 Javascript
vue实现简单加法计算器
2020/10/22 Javascript
Python中 Lambda表达式全面解析
2016/11/28 Python
python Crypto模块的安装与使用方法
2017/12/21 Python
python筛选出两个文件中重复行的方法
2018/05/31 Python
python实现单链表中删除倒数第K个节点的方法
2018/09/28 Python
selenium 安装与chromedriver安装的方法步骤
2019/06/12 Python
python3 字符串知识点学习笔记
2020/02/08 Python
Python第三方库的几种安装方式(小结)
2020/04/03 Python
Html5基于canvas实现电子签名并生成PDF文档
2020/12/07 HTML / CSS
高性能装备提升营地:Kammok
2019/02/27 全球购物
大学自我鉴定
2013/12/20 职场文书
无刑事犯罪记录证明
2014/09/18 职场文书
大学生实训报告总结
2014/11/05 职场文书
2014年应急工作总结
2014/12/11 职场文书
Golang二维数组的使用方式
2021/05/28 Golang
Python读取和写入Excel数据
2022/04/20 Python
MySQL约束(创建表时的各种条件说明)
2022/06/21 MySQL