通过实例了解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网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)
Jun 09 Python
wxPython定时器wx.Timer简单应用实例
Jun 03 Python
Python实现替换文件中指定内容的方法
Mar 19 Python
Python实现的自定义多线程多进程类示例
Mar 23 Python
python定向爬虫校园论坛帖子信息
Jul 23 Python
Python中flatten( )函数及函数用法详解
Nov 02 Python
python3+PyQt5 数据库编程--增删改实例
Jun 17 Python
浅谈图像处理中掩膜(mask)的意义
Feb 19 Python
Python+redis通过限流保护高并发系统
Apr 15 Python
Python系统公网私网流量监控实现流程
Nov 23 Python
python爬虫selenium模块详解
Mar 30 Python
教你用Python+selenium搭建自动化测试环境
Jun 18 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
德生9700DX电路分析
2021/03/02 无线电
PHP使用内置函数生成图片的方法详解
2016/05/09 PHP
自制PHP框架之路由与控制器
2017/05/07 PHP
SyntaxHighlighter代码加色使用方法
2008/09/07 Javascript
jquery 模拟类搜索框自动完成搜索提示功能(改进)
2010/05/24 Javascript
jQuery+jqmodal弹出窗口实现代码分明
2010/06/14 Javascript
js跨域问题之跨域iframe自适应大小实现代码
2010/07/17 Javascript
js原型链原理看图说明
2012/07/07 Javascript
js动态添加表格数据使用insertRow和insertCell实现
2014/05/22 Javascript
js操作数组函数实例小结
2015/12/10 Javascript
老生常谈Javascript中的原型和this指针
2016/10/09 Javascript
javascript实现无法关闭的弹框
2016/11/27 Javascript
基于react后端渲染模板引擎noox发布使用
2018/01/11 Javascript
JavaScript 中定义函数用 var foo = function () {} 和 function foo()区别介绍
2018/03/01 Javascript
JS数组去重的6种方法完整实例
2018/12/08 Javascript
vue里如何主动销毁keep-alive缓存的组件
2019/03/21 Javascript
a标签调用js的方法总结
2019/09/05 Javascript
Vue自定义render统一项目组弹框功能
2020/06/07 Javascript
python中利用队列asyncio.Queue进行通讯详解
2017/09/10 Python
Python字符串和字典相关操作的实例详解
2017/09/23 Python
python使用sqlite3时游标使用方法
2018/03/13 Python
scrapy-redis源码分析之发送POST请求详解
2019/05/15 Python
使用pip安装python库的多种方式
2019/07/31 Python
python groupby 函数 as_index详解
2019/12/16 Python
python脚本监控logstash进程并邮件告警实例
2020/04/28 Python
python 串行执行和并行执行实例
2020/04/30 Python
Python如何实现线程间通信
2020/07/30 Python
10个示例带你掌握python中的元组
2020/11/23 Python
Python之Sklearn使用入门教程
2021/02/19 Python
路易威登和香奈儿手袋:LuxeDH
2017/01/12 全球购物
人力资源行政经理自我评价
2013/10/23 职场文书
中专毕业生自荐信
2013/11/16 职场文书
安全生产责任书
2014/03/12 职场文书
青年教师听课心得体会
2016/01/15 职场文书
redis 查看所有的key方式
2021/05/07 Redis
python中subplot大小的设置步骤
2021/06/28 Python