通过实例了解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抓取最新博客内容并生成Rss
May 17 Python
python+tkinter编写电脑桌面放大镜程序实例代码
Jan 16 Python
Python实现JSON反序列化类对象的示例
Jan 31 Python
python excel使用xlutils类库实现追加写功能的方法
May 02 Python
使用python判断你是青少年还是老年人
Nov 29 Python
python print输出延时,让其立刻输出的方法
Jan 07 Python
使用python3调用wxpy模块监控linux日志并定时发送消息给群组或好友
Jun 05 Python
为什么从Python 3.6开始字典有序并效率更高
Jul 15 Python
python openpyxl使用方法详解
Jul 18 Python
python将字符串转变成dict格式的实现
Nov 18 Python
pyinstaller打包程序exe踩过的坑
Nov 19 Python
如何使用python代码操作git代码
Feb 29 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
在smarty中调用php内置函数的方法
2013/02/07 PHP
微信第三方登录(原生)demo【必看篇】
2017/05/26 PHP
event.keyCode键码值表 附只能输入特定的字符串代码
2009/05/15 Javascript
javascript Base类 包含基本的方法
2009/07/22 Javascript
DWZ刷新dialog解决方法
2013/03/03 Javascript
javascript页面渲染速度测试脚本分享
2014/04/15 Javascript
Javascript的严格模式strict mode详细介绍
2014/06/06 Javascript
js行号显示的文本框实现效果(兼容多种浏览器 )
2015/10/23 Javascript
JavaScript代码因逗号不规范导致IE不兼容的问题
2016/02/25 Javascript
Bootstrap与KnockoutJs相结合实现分页效果实例详解
2016/05/03 Javascript
Nodejs中 npm常用命令详解
2016/07/04 NodeJs
JS基于面向对象实现的拖拽功能示例
2016/12/20 Javascript
RequireJS 依赖关系的实例(推荐)
2017/01/21 Javascript
在 Angular2 中实现自定义校验指令(确认密码)的方法
2017/01/23 Javascript
详解Layer弹出层样式
2017/08/21 Javascript
使用Vue-Router 2实现路由功能实例详解
2017/11/14 Javascript
angular实现页面打印局部功能的思考与方法
2018/04/13 Javascript
详解vue-cli官方脚手架配置
2018/07/20 Javascript
在React中写一个Animation组件为组件进入和离开加上动画/过度效果
2019/06/24 Javascript
从零撸一个pc端vue的ui组件库( 计数器组件 )
2019/08/08 Javascript
Vue快速实现通用表单验证的示例代码
2020/01/09 Javascript
JavaScript检测浏览器是否支持CSS变量代码实例
2020/04/03 Javascript
vue中全局路由守卫中替代this操作(this.$store/this.$vux)
2020/07/24 Javascript
python实现问号表达式(?)的方法
2013/11/27 Python
Python基于QRCode实现生成二维码的方法【下载,安装,调用等】
2017/07/11 Python
对python列表里的字典元素去重方法详解
2019/01/21 Python
pytorch实现mnist分类的示例讲解
2020/01/10 Python
Django Haystack 全文检索与关键词高亮的实现
2020/02/17 Python
Python flask框架实现浏览器点击自定义跳转页面
2020/06/04 Python
python3.7中安装paddleocr及paddlepaddle包的多种方法
2020/11/27 Python
CSS3实例分享--超炫checkbox复选框和radio单选框
2014/09/01 HTML / CSS
房产销售经理职责
2013/12/20 职场文书
公积金单位接收函
2014/01/11 职场文书
骨干教师事迹材料
2014/12/17 职场文书
2015年党建工作总结
2015/03/30 职场文书
财务部岗位职责范本
2015/04/14 职场文书