通过实例了解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函数式编程指南(四):生成器详解
Jun 24 Python
Python文件和流(实例讲解)
Sep 12 Python
Python使用pyh生成HTML文档的方法示例
Mar 10 Python
python寻找list中最大值、最小值并返回其所在位置的方法
Jun 27 Python
详解Python3.6的py文件打包生成exe
Jul 13 Python
python3调用百度翻译API实现实时翻译
Aug 16 Python
Python文件如何引入?详解引入Python文件步骤
Dec 10 Python
python使用socket 先读取长度,在读取报文内容示例
Sep 26 Python
python3 字符串知识点学习笔记
Feb 08 Python
Python装饰器的应用场景代码总结
Apr 10 Python
python适合做数据挖掘吗
Jun 16 Python
Pytorch生成随机数Tensor的方法汇总
Sep 09 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
967 个函式
2006/10/09 PHP
php while循环得到循环次数
2013/10/26 PHP
Codeigniter中禁止A Database Error Occurred错误提示的方法
2014/06/12 PHP
JavaScript版代码高亮
2006/06/26 Javascript
捕获关闭窗口的脚本
2009/01/10 Javascript
JQuery跨Iframe选择实现代码
2010/08/19 Javascript
11款新鲜的jQuery插件[附所有demo下载]
2011/01/24 Javascript
javascript新建标签,判断键盘输入,以及判断焦点(示例代码)
2013/11/25 Javascript
JavaScript获取网页、浏览器、屏幕高度和宽度汇总
2014/12/18 Javascript
JQuery select(下拉框)操作方法汇总
2015/04/15 Javascript
JS实现仿QQ聊天窗口抖动特效
2015/05/10 Javascript
js获取页面description的方法
2015/05/21 Javascript
JavaScript实现单击下拉框选择直接跳转页面的方法
2015/07/02 Javascript
js面向对象的写法
2016/02/19 Javascript
基于HTML+CSS+JS实现增加删除修改tab导航特效代码
2016/08/05 Javascript
AngularJS中的DOM操作用法分析
2016/11/04 Javascript
js中setTimeout的妙用--防止循环超时
2017/03/06 Javascript
Vue.JS项目中5个经典Vuex插件
2017/11/28 Javascript
使用npm安装最新版本nodejs
2018/01/18 NodeJs
详解redis在nodejs中的应用
2018/05/02 NodeJs
p5.js临摹动态图形的方法
2019/10/23 Javascript
JavaScript手写数组的常用函数总结
2020/11/22 Javascript
[04:45]DOTA2上海特级锦标赛主赛事第四日RECAP
2016/03/06 DOTA
python数据结构之二叉树的建立实例
2014/04/29 Python
python通过加号运算符操作列表的方法
2015/07/28 Python
python生成词云的实现方法(推荐)
2017/06/13 Python
Python 实现网页自动截图的示例讲解
2018/05/17 Python
python 判断参数为Nonetype类型或空的实例
2018/10/30 Python
python xpath获取页面注释的方法
2019/01/14 Python
python实现windows倒计时锁屏功能
2019/07/30 Python
Python模块/包/库安装的六种方法及区别
2020/02/24 Python
CSS3 clip-path 用法介绍详解
2018/03/01 HTML / CSS
美国婚礼和派对礼品网站:Kate Aspen(新娘送礼会、迎婴派对)
2018/03/28 全球购物
产品委托授权书范本
2014/09/16 职场文书
远程教育学习心得体会
2016/01/23 职场文书
Nginx内网单机反向代理的实现
2021/11/07 Servers