通过实例了解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之深入变量和引用对象
Sep 24 Python
在Django中输出matplotlib生成的图片方法
May 24 Python
解决python中os.listdir()函数读取文件夹下文件的乱序和排序问题
Oct 17 Python
python实现逐个读取txt字符并修改
Dec 24 Python
详解PyCharm+QTDesigner+PyUIC使用教程
Jun 13 Python
在pycharm下设置自己的个性模版方法
Jul 15 Python
django settings.py 配置文件及介绍
Jul 15 Python
python区分不同数据类型的方法
Oct 14 Python
python GUI库图形界面开发之PyQt5浏览器控件QWebEngineView详细使用方法
Feb 26 Python
python实现图片转字符画
Feb 19 Python
Django cookie和session的应用场景及如何使用
Apr 29 Python
python基础之函数的定义和调用
Oct 24 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版)
2006/10/09 PHP
thinkphp中字符截取函数msubstr()用法分析
2016/01/09 PHP
php通过文件头判断格式的方法
2016/05/28 PHP
javascript css styleFloat和cssFloat
2010/03/15 Javascript
javascript奇异的arguments分析
2010/10/20 Javascript
Node.js实战 建立简单的Web服务器
2012/03/08 Javascript
javascript实现div的拖动并调整大小类似qq空间个性编辑模块
2012/12/12 Javascript
实现动画效果核心方式的js代码
2013/09/27 Javascript
jquery ajax 调用失败的原因示例介绍
2013/09/27 Javascript
JavaScript中的lastIndexOf()方法使用详解
2015/06/06 Javascript
JS实现不规则TAB选项卡效果代码
2015/09/16 Javascript
JavaScript作用域示例详解
2016/07/07 Javascript
分类解析jQuery选择器
2016/11/23 Javascript
layer弹出层框架alert与msg详解
2017/03/14 Javascript
使用layer弹窗和layui表单实现新增功能
2018/08/09 Javascript
react写一个select组件的实现代码
2019/04/03 Javascript
详解vue中axios请求的封装
2019/04/08 Javascript
微信小程序登录数据解密及状态维持实例详解
2019/05/06 Javascript
Element ui 下拉多选时新增一个选择所有的选项
2019/08/21 Javascript
vue中添加与删除关键字搜索功能
2019/10/12 Javascript
javascript设计模式 ? 桥接模式原理与应用实例分析
2020/04/13 Javascript
有趣的JavaScript隐式类型转换操作实例分析
2020/05/02 Javascript
Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
2018/03/19 Python
pandas DataFrame创建方法的方式
2019/08/02 Python
Python单链表原理与实现方法详解
2020/02/22 Python
Python函数生成器原理及使用详解
2020/03/12 Python
Anaconda+Pycharm环境下的PyTorch配置方法
2020/03/13 Python
Python爬虫爬取微信朋友圈
2020/08/06 Python
浅谈pc和移动端的响应式的使用
2019/01/03 HTML / CSS
Hotels.com香港酒店网:你的自由行酒店订房专家
2018/01/22 全球购物
巴西电子、家电、智能手机购物网站:Girafa
2019/06/04 全球购物
初级Java程序员面试题
2016/03/03 面试题
护士毕业自我鉴定
2014/02/07 职场文书
大专毕业生求职信
2014/07/05 职场文书
幼儿园八一建军节活动方案
2014/08/27 职场文书
八年级作文之友谊
2019/12/02 职场文书