通过实例了解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格式化压缩后的JS文件的方法
Mar 05 Python
详解Python如何获取列表(List)的中位数
Aug 12 Python
Flask框架web开发之零基础入门
Dec 10 Python
Python使用Pandas库实现MySQL数据库的读写
Jul 06 Python
win7下 python3.6 安装opencv 和 opencv-contrib-python解决 cv2.xfeatures2d.SIFT_create() 的问题
Oct 24 Python
Python获取统计自己的qq群成员信息的方法
Nov 15 Python
Python利用matplotlib绘制约数个数统计图示例
Nov 26 Python
Python 日期的转换及计算的具体使用详解
Jan 16 Python
python随机生成大小写字母数字混合密码(仅20行代码)
Feb 01 Python
wxpython自定义下拉列表框过程图解
Feb 14 Python
python GUI库图形界面开发之PyQt5日期时间控件QDateTimeEdit详细使用方法与实例
Feb 27 Python
什么是Python装饰器?如何定义和使用?
Apr 11 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
浅谈Windows下 PHP4.0与oracle 8的连接设置
2006/10/09 PHP
在字符串中把网址改成超级链接
2006/10/09 PHP
用PHP函数解决SQL injection
2006/12/09 PHP
深入phpMyAdmin的安装与配置的详细步骤
2013/05/07 PHP
5种PHP创建数组的实例代码分享
2014/01/17 PHP
Zend Framework动作助手FlashMessenger用法详解
2016/03/05 PHP
Javascript 判断函数类型完美解决方案
2009/09/02 Javascript
jQuery异步上传文件插件ajaxFileUpload详细介绍
2015/05/19 Javascript
JavaScript中数组继承的简单示例
2015/07/29 Javascript
javascript设置和获取cookie的方法实例详解
2016/01/05 Javascript
JQuery 设置checkbox值二次无效的解决方法
2016/07/22 Javascript
js从外部获取图片的实现方法
2016/08/05 Javascript
jQuery UI制作选项卡(tabs)
2016/12/13 Javascript
node.js实现复制文本到剪切板的功能
2017/01/23 Javascript
javascript基本常用排序算法解析
2017/09/27 Javascript
使用jQuery动态设置单选框的选中效果
2018/12/06 jQuery
bootstrap-table实现表头固定以及列固定的方法示例
2019/03/07 Javascript
layui实现二维码弹窗、并下载到本地的方法
2019/09/25 Javascript
jsonp格式前端发送和后台接受写法的代码详解
2019/11/07 Javascript
[02:21]十步杀一人,千里不留行——DOTA2全新英雄天涯墨客展示
2018/08/29 DOTA
通过数据库向Django模型添加字段的示例
2015/07/21 Python
Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法
2016/04/23 Python
Python使用Pickle库实现读写序列操作示例
2018/06/15 Python
利用python在excel里面直接使用sql函数的方法
2019/02/08 Python
使用python模拟命令行终端的示例
2019/08/13 Python
利用Python校准本地时间的方法教程
2019/10/31 Python
TensorFlow tensor的拼接实例
2020/01/19 Python
Python Django中间件使用原理及流程分析
2020/06/13 Python
纯CSS3实现给头像加个光芒四射且旋转的背景动画效果
2014/05/07 HTML / CSS
HTML5中图片之间的缝隙完美解决方法
2017/07/07 HTML / CSS
TripAdvisor越南:全球领先的旅游网站
2017/09/21 全球购物
机械电子工程毕业生自荐信
2013/11/23 职场文书
小学新学期寄语
2014/04/02 职场文书
财产公证书样本
2014/04/04 职场文书
公司收款委托书范本
2014/09/20 职场文书
高中化学教学反思
2016/02/22 职场文书