通过实例了解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中urlparse模块介绍与使用示例
Nov 19 Python
使用Python实现租车计费系统的两种方法
Sep 29 Python
pandas 空的dataframe 插入列名的示例
Oct 30 Python
Python设计模式之迭代器模式原理与用法实例分析
Jan 10 Python
python中的句柄操作的方法示例
Jun 20 Python
python 实现交换两个列表元素的位置示例
Jun 26 Python
Python使用scrapy爬取阳光热线问政平台过程解析
Aug 14 Python
python使用celery实现异步任务执行的例子
Aug 28 Python
python3读取csv文件任意行列代码实例
Jan 13 Python
python GUI库图形界面开发之PyQt5控件QTableWidget详细使用方法与属性
Feb 25 Python
python手机号前7位归属地爬虫代码实例
Mar 31 Python
Python参数传递及收集机制原理解析
Jun 05 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汉字转拼音的示例
2014/02/27 PHP
PHP开发之用微信远程遥控服务器
2018/01/25 PHP
php使用gearman进行任务分发操作实例详解
2020/02/26 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
2020/03/23 PHP
JavaScrip单线程引擎工作原理分析
2010/09/04 Javascript
jQuery powerFloat万能浮动层下拉层插件使用介绍
2010/12/27 Javascript
AngularJS基础知识
2014/12/21 Javascript
JavaScript设置、获取、清除单值和多值cookie的方法
2015/11/17 Javascript
js手机号4位显示空格,银行卡每4位显示空格效果
2017/03/23 Javascript
基于JS脚本语言的基础语法详解
2017/07/22 Javascript
vue-cli 自定义指令directive 添加验证滑块示例
2017/10/19 Javascript
vue 界面刷新数据被清除 localStorage的使用详解
2018/09/16 Javascript
如何封装了一个vue移动端下拉加载下一页数据的组件
2019/01/06 Javascript
原生JS无缝滑动轮播图
2019/10/22 Javascript
[16:56]教你分分钟做大人:司夜刺客
2014/10/30 DOTA
[47:12]TFT vs Secret Supermajor小组赛C组 BO3 第三场 6.3
2018/06/04 DOTA
[47:45]DOTA2-DPC中国联赛 正赛 Phoenix vs Dragon BO3 第一场 2月26日
2021/03/11 DOTA
Python中实现参数类型检查的简单方法
2015/04/21 Python
详解Django的model查询操作与查询性能优化
2018/10/16 Python
Python文件如何引入?详解引入Python文件步骤
2018/12/10 Python
python binascii 进制转换实例
2019/06/12 Python
Python找出列表中出现次数最多的元素三种方式
2020/02/24 Python
selenium+python配置chrome浏览器的选项的实现
2020/03/18 Python
Python代码中如何读取键盘录入的值
2020/05/27 Python
澳大利亚领先的女性运动服品牌:Lorna Jane
2020/06/19 全球购物
工程预算与管理应届生求职信
2013/10/06 职场文书
领导检查欢迎词
2014/01/14 职场文书
品牌宣传方案
2014/03/21 职场文书
受伤赔偿协议书
2014/09/24 职场文书
在职证明书范本(2014新版)
2014/09/25 职场文书
城南旧事观后感
2015/06/11 职场文书
火锅店的开业营销方案范本!
2019/07/05 职场文书
mysql批量新增和存储的方法实例
2021/04/07 MySQL
MySQL Router的安装部署
2021/04/24 MySQL
厉害!这是Redis可视化工具最全的横向评测
2021/07/15 Redis
Python中异常处理用法
2021/11/27 Python