通过实例了解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 相关文章推荐
使用Protocol Buffers的C语言拓展提速Python程序的示例
Apr 16 Python
python利用正则表达式搜索单词示例代码
Sep 24 Python
解决nohup重定向python输出到文件不成功的问题
May 11 Python
Python3使用pandas模块读写excel操作示例
Jul 03 Python
利用Python如何批量更新服务器文件
Jul 29 Python
python中join()方法介绍
Oct 11 Python
使用 Python 玩转 GitHub 的贡献板(推荐)
Apr 04 Python
Python3.5内置模块之time与datetime模块用法实例分析
Apr 27 Python
在PyCharm中控制台输出日志分层级分颜色显示的方法
Jul 11 Python
python命令 -u参数用法解析
Oct 24 Python
python中pivot()函数基础知识点
Jan 03 Python
单身狗福利?Python爬取某婚恋网征婚数据
Jun 03 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 各种排序算法实现代码
2009/08/20 PHP
shopex主机报错误请求解决方案(No such file or directory)
2011/12/27 PHP
php写入数据到CSV文件的方法
2015/03/14 PHP
详解yii2使用多个数据库的案例
2017/06/16 PHP
PHP排序算法之直接插入排序(Straight Insertion Sort)实例分析
2018/04/20 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
2020/03/29 PHP
javascript 动态数据下的锚点错位问题解决方法
2008/12/24 Javascript
jQuery Selector选择器小结
2010/05/06 Javascript
JQUBAR1.1 jQuery 柱状图插件发布
2010/11/28 Javascript
lyhucSelect基于Jquery的Select数据联动插件
2011/03/29 Javascript
javascript实现可改变滚动方向的无缝滚动实例
2013/06/17 Javascript
javascript中tostring()和valueof()的用法及两者的区别
2015/11/16 Javascript
Angularjs中如何使用filterFilter函数过滤
2016/02/06 Javascript
JS实现动态增加和删除li标签行的实例代码
2016/10/16 Javascript
JS动态遍历json中所有键值对的方法(不知道属性名的情况)
2016/12/28 Javascript
webpack搭建vue 项目的步骤
2017/12/27 Javascript
react router4+redux实现路由权限控制的方法
2018/05/03 Javascript
云服务器部署Node.js项目的方法步骤(小白系列)
2020/03/23 Javascript
针对Vue路由history模式下Nginx后台配置操作
2020/10/22 Javascript
使用Python脚本将Bing的每日图片作为桌面的教程
2015/05/04 Python
对python中的pop函数和append函数详解
2018/05/04 Python
python输入整条数据分割存入数组的方法
2018/11/13 Python
对python列表里的字典元素去重方法详解
2019/01/21 Python
Python列表的切片实例讲解
2019/08/20 Python
Python列表推导式实现代码实例
2020/09/09 Python
python中类与对象之间的关系详解
2020/12/16 Python
一款简洁的纯css3代码实现的动画导航
2014/10/31 HTML / CSS
青年创业培训欢迎词
2014/01/08 职场文书
小学生自我评价范文
2014/01/25 职场文书
医学专业应届生的自我评价
2014/02/28 职场文书
教导主任竞聘演讲稿
2014/05/16 职场文书
2014财务年终工作总结
2014/12/08 职场文书
2015年酒店服务员工作总结
2015/05/18 职场文书
员工离职证明范本
2015/06/12 职场文书
2015年女工委工作总结
2015/07/27 职场文书
队列队形口号
2015/12/25 职场文书