通过实例了解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中的map()函数和reduce()函数的用法
Apr 27 Python
在django中使用自定义标签实现分页功能
Jul 04 Python
python遍历文件夹下所有excel文件
Jan 03 Python
利用Python实现在同一网络中的本地文件共享方法
Jun 04 Python
python 从文件夹抽取图片另存的方法
Dec 04 Python
python使用pip安装模块出现ReadTimeoutError: HTTPSConnectionPool的解决方法
Oct 04 Python
Django将默认的SQLite更换为MySQL的实现
Nov 18 Python
基于python实现破解滑动验证码过程解析
May 28 Python
Keras模型转成tensorflow的.pb操作
Jul 06 Python
详解python命令提示符窗口下如何运行python脚本
Sep 11 Python
python3排序的实例方法
Oct 20 Python
Python Django项目和应用的创建详解
Nov 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中PDO的错误处理
2011/09/04 PHP
destoon切换城市后实现logo旁边显示地区名称的方法
2014/08/21 PHP
如何直接访问php实例对象中的private属性详解
2017/10/12 PHP
Laravel 集成微信用户登录和绑定的实现
2019/12/27 PHP
PHP全局使用Laravel辅助函数dd
2019/12/26 PHP
TP5框架安全机制实例分析
2020/04/05 PHP
JQuery实现自定义对话框的代码
2008/06/15 Javascript
JS去除字符串的空格增强版(可以去除中间的空格)
2009/08/26 Javascript
Javascript document.referrer判断访客来源网址
2020/05/15 Javascript
js获取height和width的方法说明
2013/01/06 Javascript
Jquery中LigerUi的弹出编辑框(实现方法)
2013/07/09 Javascript
Javascript中call与apply的学习笔记
2014/09/22 Javascript
初始Nodejs
2014/11/08 NodeJs
Angular中的Promise对象($q介绍)
2015/03/03 Javascript
jQuery实现带渐显效果的人物多级关系图代码
2015/10/16 Javascript
完美实现bootstrap分页查询
2015/12/09 Javascript
AngularJS 限定$scope的范围实例详解
2017/06/23 Javascript
webpack写jquery插件的环境配置
2017/12/21 jQuery
npm 下载指定版本的组件方法
2018/05/17 Javascript
Vue 数组和对象更新,但是页面没有刷新的解决方式
2019/11/09 Javascript
原生JavaScript实现随机点名表
2021/01/14 Javascript
Python进程间通信用法实例
2015/06/04 Python
Python/ArcPy遍历指定目录中的MDB文件方法
2018/10/27 Python
如何解决flask修改静态资源后缓存文件不能及时更改问题
2020/08/02 Python
python 通过exifread读取照片信息
2020/12/24 Python
CSS3 calc()会计算属性详解
2018/02/27 HTML / CSS
canvas像素点操作之视频绿幕抠图
2018/09/11 HTML / CSS
法国美发器材和产品购物网站:Beauty Coiffure
2016/12/05 全球购物
美国购买体育赛事门票网站:TicketCity
2019/03/06 全球购物
Mountain Hardwear官网:攀岩服装和户外装备
2019/09/26 全球购物
遇到的Mysql的面试题
2014/06/29 面试题
英语道歉信范文
2014/01/09 职场文书
《小猫刮胡子》教学反思
2014/02/21 职场文书
python爬取企查查企业信息之selenium自动模拟登录企查查
2021/04/08 Python
如何开发一个渐进式Web应用程序PWA
2021/05/10 Javascript
我家女友可不止可爱呢 公开OP主题曲无字幕动画MV
2022/04/11 日漫