通过实例了解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类方法__init__和__del__构造、析构过程分析
Mar 06 Python
举例讲解Python程序与系统shell交互的方式
Apr 09 Python
Python中统计函数运行耗时的方法
May 05 Python
python matlibplot绘制3D图形
Jul 02 Python
python实现泊松图像融合
Jul 26 Python
JSON文件及Python对JSON文件的读写操作
Oct 07 Python
python3 面向对象__类的内置属性与方法的实例代码
Nov 09 Python
Python进阶之全面解读高级特性之切片
Feb 19 Python
Python的形参和实参使用方式
Dec 24 Python
Pytorch中膨胀卷积的用法详解
Jan 07 Python
关于Pytorch的MLP模块实现方式
Jan 07 Python
基于python纯函数实现井字棋游戏
May 27 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实现可逆加密的方法
2015/08/11 PHP
javascript 树控件 比较好用
2009/06/11 Javascript
jQuery 第二课 操作包装集元素代码
2010/03/14 Javascript
js调用activeX获取u盘序列号的代码
2011/11/21 Javascript
使用js 设置url参数
2013/07/08 Javascript
浅谈 jQuery 事件源码定位问题
2014/06/18 Javascript
jQuery插件zoom实现图片全屏放大弹出层特效
2015/04/15 Javascript
基于jQuery实现的旋转彩圈实例
2015/06/26 Javascript
理解Angular数据双向绑定
2016/01/10 Javascript
jQuery 中ajax异步调用的四种方式
2016/06/28 Javascript
AngularJS过滤器详解及示例代码
2016/08/16 Javascript
浅谈JS获取元素的N种方法及其动静态讨论
2017/08/25 Javascript
详细介绍RxJS在Angular中的应用
2017/09/23 Javascript
vue 使用ref 让父组件调用子组件的方法
2018/02/08 Javascript
vue router动态路由下让每个子路由都是独立组件的解决方案
2018/04/24 Javascript
浅谈webpack-dev-server的配置和使用
2018/05/17 Javascript
vuejs使用axios异步访问时用get和post的实例讲解
2018/08/09 Javascript
JavaScript实现的弹出遮罩层特效经典示例【基于jQuery】
2019/07/10 jQuery
改进 JavaScript 和 Rust 的互操作性并深入认识 wasm-bindgen 组件
2019/07/13 Javascript
基于JavaScript 实现拖放功能
2019/09/12 Javascript
javascript实现前端成语点击验证优化
2020/06/24 Javascript
python使用logging模块发送邮件代码示例
2018/01/18 Python
Pycharm保存不能自动同步到远程服务器的解决方法
2019/06/27 Python
python 爬取古诗文存入mysql数据库的方法
2020/01/08 Python
python中pyqtgraph知识点总结
2021/01/26 Python
HTML5网页录音和上传到服务器支持PC、Android,支持IOS微信功能
2019/04/26 HTML / CSS
医学院学生的自我评价分享
2013/11/19 职场文书
生产部管理制度
2014/01/31 职场文书
小学生竞选班干部演讲稿(5篇)
2014/09/12 职场文书
大学生自荐信范文
2015/03/05 职场文书
红色经典观后感
2015/06/18 职场文书
捐书仪式主持词
2015/07/04 职场文书
python 算法题——快乐数的多种解法
2021/05/27 Python
Java 垃圾回收超详细讲解记忆集和卡表
2022/04/08 Java/Android
MySQL 外连接语法之 OUTER JOIN
2022/04/09 MySQL
python中pd.cut()与pd.qcut()的对比及示例
2022/06/16 Python