通过实例了解python__slots__使用方法


Posted in Python onSeptember 14, 2020

一、背景

python是一个动态语言,可以支持我们在运行时动态的给类、对象添加属性或者方法;但是如果我们想要限制可以添加的属性或方法该怎么办呢?

二、__slots__

python允许在定义class的时候,定义一个特殊的__slots__变量,来限制该class能添加的属性:

>>> class Student(object):
... __slots__ = ('name', 'age') # 用tuple定义允许绑定的属性名称
...

然后尝试添加属性:

>>> s = Student() # 创建新的实例
>>> s.name = 'Michael' # 绑定属性'name'
>>> s.age = 25 # 绑定属性'age'
>>> s.score = 99 # 绑定属性'score'
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
AttributeError: 'Student' object has no attribute 'score'

由于'score'没有被放到__slots__中,所以不能绑定score属性,试图绑定score将得到AttributeError的错误。

使用__slots__要注意,__slots__定义的属性仅对当前类起作用,对继承的子类是不起作用的:

>>> class GraduateStudent(Student):
... pass
...
>>> g = GraduateStudent()
>>> g.score = 9999

除非在子类中也定义__slots__,这样,子类允许定义的属性就是自身的__slots__加上父类的__slots__。

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

Python 相关文章推荐
python获取糗百图片代码实例
Dec 18 Python
Python程序中使用SQLAlchemy时出现乱码的解决方案
Apr 24 Python
Python使用QQ邮箱发送Email的方法实例
Feb 09 Python
Python针对给定字符串求解所有子序列是否为回文序列的方法
Apr 21 Python
Python使用matplotlib和pandas实现的画图操作【经典示例】
Jun 13 Python
python实现简易动态时钟
Nov 19 Python
python制作英语翻译小工具代码实例
Sep 09 Python
简单了解python数组的基本操作
Nov 26 Python
通过实例了解Python str()和repr()的区别
Jan 17 Python
使用 Python 在京东上抢口罩的思路详解
Feb 27 Python
使用python检查yaml配置文件是否符合要求
Apr 09 Python
Scrapy中如何向Spider传入参数的方法实现
Sep 28 Python
python如何遍历指定路径下所有文件(按按照时间区间检索)
Sep 14 #Python
详解python实现可视化的MD5、sha256哈希加密小工具
Sep 14 #Python
Python利用pip安装tar.gz格式的离线资源包
Sep 14 #Python
Python tkinter制作单机五子棋游戏
Sep 14 #Python
python安装cx_Oracle和wxPython的方法
Sep 14 #Python
python输入中文的实例方法
Sep 14 #Python
python与js主要区别点总结
Sep 13 #Python
You might like
利用PHP扩展vld查看PHP opcode操作步骤
2013/03/04 PHP
采用memcache在web集群中实现session的同步会话
2014/07/05 PHP
BOOM vs RR BO5 第一场 2.14
2021/03/10 DOTA
javascript 验证日期的函数
2010/03/18 Javascript
JS父页面与子页面相互传值方法
2014/03/05 Javascript
jquery自动将form表单封装成json的具体实现
2014/03/17 Javascript
JavaScript定时显示广告代码分享
2015/03/02 Javascript
javascript+HTML5的Canvas实现Lab单车动画效果
2015/08/07 Javascript
Javascript基础之数组的使用
2016/05/13 Javascript
怎么引入(调用)一个JS文件
2016/05/26 Javascript
easyui combotree加载静态数据问题(选不上)解决方法
2016/12/26 Javascript
vue拦截器Vue.http.interceptors.push使用详解
2017/04/22 Javascript
原生JS实现层叠轮播图
2017/05/17 Javascript
jquery easyui如何实现格式化列
2017/07/30 jQuery
JS中利用swiper实现3d翻转幻灯片实例代码
2017/08/25 Javascript
Angular.js实现获取验证码倒计时60秒按钮的简单方法
2017/10/18 Javascript
JS实现点击链接切换显示隐藏内容的方法
2017/10/19 Javascript
详解NodeJS Https HSM双向认证实现
2019/03/12 NodeJs
如何手动实现一个 JavaScript 模块执行器
2020/10/16 Javascript
vue绑定class的三种方法
2020/12/24 Vue.js
Javascript实现关闭广告效果
2021/01/29 Javascript
python登陆asp网站页面的实现代码
2015/01/14 Python
Python设计实现的计算器功能完整实例
2017/08/18 Python
Python编程scoketServer实现多线程同步实例代码
2018/01/29 Python
Python进阶之尾递归的用法实例
2018/01/31 Python
numpy.random.seed()的使用实例解析
2018/02/03 Python
Python多进程并发与多线程并发编程实例总结
2018/02/08 Python
基于python plotly交互式图表大全
2019/12/07 Python
python GUI库图形界面开发之PyQt5输入对话框QInputDialog详细使用方法与实例
2020/02/27 Python
django正续或者倒序查库实例
2020/05/19 Python
Python虚拟环境的创建和使用详解
2020/09/07 Python
去加拿大的旅行和假期:Canadian Affair
2016/10/25 全球购物
经销商会议欢迎词
2014/01/11 职场文书
庆六一开幕词
2015/01/29 职场文书
职工宿舍管理制度
2015/08/05 职场文书
工伤调解协议书
2016/03/21 职场文书