通过实例了解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获取网页状态码示例
Mar 30 Python
Python字符串特性及常用字符串方法的简单笔记
Jan 04 Python
Python装饰器入门学习教程(九步学习)
Jan 28 Python
在python3环境下的Django中使用MySQL数据库的实例
Aug 29 Python
Python实现一个简单的验证码程序
Nov 03 Python
Python通过Django实现用户注册和邮箱验证功能代码
Dec 11 Python
Python用sndhdr模块识别音频格式详解
Jan 11 Python
python生成1行四列全2矩阵的方法
Aug 04 Python
CentOS6.9 Python环境配置(python2.7、pip、virtualenv)
May 06 Python
Python下opencv图像阈值处理的使用笔记
Aug 04 Python
Python 从subprocess运行的子进程中实时获取输出的例子
Aug 14 Python
python实现上传文件到linux指定目录的方法
Jan 03 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
ThinkPHP3.1新特性之Action参数绑定
2014/06/19 PHP
php $_SESSION会员登录实例分享
2021/01/19 PHP
Yii2使用自带的UploadedFile实现的文件上传
2016/06/20 PHP
php版微信js-sdk支付接口类用法示例
2016/10/12 PHP
tp5.1框架数据库子查询操作实例分析
2020/05/26 PHP
JAVASCRIPT  THIS详解 面向对象
2009/03/25 Javascript
javascript 写的一个简单的timer
2009/07/30 Javascript
jquery的ajax请求全面了解
2013/03/20 Javascript
Mac地址验证的javascript代码
2013/11/09 Javascript
JQuery each打印JS对象的方法
2013/11/13 Javascript
原生js的弹出层且其内的窗口居中
2014/05/14 Javascript
jQuery老黄历完整实现方法
2015/01/16 Javascript
angularJS 中$attrs方法使用指南
2015/02/09 Javascript
jQuery表单域选择器用法分析
2015/02/10 Javascript
jquery ajax 如何向jsp提交表单数据
2015/08/23 Javascript
javascript闭包(Closure)用法实例简析
2015/11/30 Javascript
Bootstrap 源代码分析(未完待续)
2016/08/17 Javascript
原生js实现返回顶部缓冲效果
2017/01/18 Javascript
AngularJS报错$apply already in progress的解决方法分析
2017/01/30 Javascript
jQuery实现遍历复选框的方法示例
2017/03/06 Javascript
使用nodejs+express实现简单的文件上传功能
2017/12/27 NodeJs
javascript填充默认头像方法
2018/02/22 Javascript
vue iview实现动态路由和权限验证功能
2018/04/17 Javascript
详解基于vue-cli3快速发布一个fullpage组件
2019/03/08 Javascript
vue以组件或者插件的形式实现throttle或者debounce
2019/05/22 Javascript
Vue+Element实现表格编辑、删除、以及新增行的最优方法
2019/05/28 Javascript
pycharm 使用心得(一)安装和首次使用
2014/06/05 Python
python实现对excel进行数据剔除操作实例
2017/12/07 Python
微信跳一跳自动运行python脚本
2018/01/08 Python
Pyqt5如何让QMessageBox按钮显示中文示例代码
2019/04/11 Python
Python模块的定义,模块的导入,__name__用法实例分析
2020/01/07 Python
浅谈Python程序的错误:变量未定义
2020/06/02 Python
python装饰器三种装饰模式的简单分析
2020/09/04 Python
荷叶母亲教学反思
2014/04/30 职场文书
会计电算化实训报告
2014/11/04 职场文书
杭州黄龙洞导游词
2015/02/10 职场文书