python的__slots__
__slots__用于限制允许实例动态绑定的属性,__slots__中没有定义的属性实例无法动态绑定(这是__slots__的表面意义)
__slots__只能限制实例绑定属性,无法限制类绑定属性
__slots__只能限制定义了此__slots__的类实例化出来的实例,无法限制继承了此类的子类实例化出来的实例
如果子类也定义了__slots__,那么实际生效的范围是父类与子类__slots__的集合
有如下的坑点和额外作用:
在不使用__slots__时,类属性与实例属性的关系如下:在不定义实例属性时,实例属性跟着类属性走;重新定义了实例属性后会发生覆盖,覆盖之后实例属性与类属性就没有了关系。即使修改类属性也不再影响实例属性
在类定义了__slots__的情况下,一旦类再绑定了__slots__中规定的属性,那么所有实例的该属性都会跟着类属性走,而且实例的此属性再也无法做原地修改之外的修改(与数据类型可变不可变有关),只有类才能做原地修改之外的修改。
相当于在内存中,类属性和所有实例的属性都指向了一块内存,这样一来与不使用__slots__相比,在某些场景下就可以更好地分配并节省内存,这也是__slots__存在的深层意义。
转载于:https://www.cnblogs.com/zhangzhaoyu/p/9234979.html
python的__slots__相关推荐
- 通过Python的__slots__节省9GB内存
我们之前提到过,Oyster.com基于Python的web服务器缓存了大量Python字典(dicts)(哈希表(hash tables))的静态内容.好啦,我们最近使用一行代码--在我们的Imag ...
- python的`__slots__`属性
1. 引言 我们先看一个问题: 对象(通过类实例化后的对象)如何储存自己的属性? 1.1. 默认情况下:对象如何储存自己的属性 为了说明这个问题, 我们先在交互式模式中做一个简单的测试: >&g ...
- Python:__slots__()方法和@property方法
1.__slots__ 1.python作为一个动态语言,可以在创建一个class类后,给类进行绑定属性和方法.但是当我们想要限制实例的属性和方法时怎么办?这个时候就可以用到__slots__()方法 ...
- python 使用__slots__来限制类的实例属性的数量
正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性.先定义class: class Student(object):pas ...
- python 之 __slots__
一.背景 python 动态语言,可以在运行过程中,修改实例的属性和增删方法 Python有时我们只想使用固定的属性,不想任意绑定属性 __slots__ 作用 限制对象属性的添加,限制类的实例使用的 ...
- Python中__slots__的使用
摘要 当一个类需要创建大量实例时,可以通过__slots__声明实例所需要的属性, 例如,class Foo(object): __slots__ = ['foo'].这样做带来以下优点: 更快的属性 ...
- Python: `__slots__`
__slots__ ''' __slots__是什么:是一个类变量,变量值可以是列表,元祖,或者可迭代对象,也可以是一个字符串(意味着所有实例只有一个数据属性) 引子:使用点来访问属性本质就是在访问类 ...
- Python 面向对象 —— __slots__ 与 @property(python 下的 getter、setter 方法)
1. 使用 __slots__ 限制 class 的属性 class Student(object):__slots__ = {'name', 'age'}# 集合# 也只允许绑定 name,age ...
- python之__slots__
一,先谈谈不使用__slots__,通常定义完class,给实例绑定属性与方法,对另一个实例没有作用的 from types import MethodTypeclass Hero (object): ...
- python基础——使用__slots__
python基础--使用__slots__ 正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性.先定义class: cla ...
最新文章
- tensorflow 入门
- 智能算法PSO的图例分析
- matlab 并联机械臂_MATLAB robot toolbox 机械臂轨迹规划
- 机器学习(2.sklearn(Scikit-learn)库、字典数据的特征抽取)
- 每天一道LeetCode-----将数组/链表后k个元素移动到前面
- Android之严苛模式(StrictMode)
- 说说 C 语言中的变量与算术表达式
- AngularJS中service,factory,provider的区别(转载:http://my.oschina.net/tanweijie/blog/295067)...
- java 线程 主进程_java 多线程通用方法
- mybatis如何在控制台打印执行的sql语句
- 网络拓扑Visio式的定制
- Oracle定时器执行多线程
- 把生活过的像模像样已经很不容易
- DNN硬件加速器设计1 -- 序(MIT)
- redis集群(服务端sharding)
- 33 - Guarded Suspension模式 等待唤醒机制的规范
- 高通与NVIDIA在物联网芯片交锋,争相引入AI
- 小米嵌入式工程师面试-心得
- 三大运营商发春,要向腾讯劫个色
- 一键“拉取”链上数据 海淀区应用遍地开花
热门文章
- 游戏开发之使用类封装动态数组(vector)(C++基础)
- Python处理多种编码报错的处理
- BZOJ5262(容斥)
- Python: str.split()和re.split()的区别
- Sublime Text2.0.2注册码,添加python编译系统:
- 分布式搜索Elasticsearch——QueryBuilders.matchPhrasePrefixQuery
- 中国“互联网+酒店”专题研究报告2015
- jQuery CSS 添加/删除类名
- mysql jdbc 驱动 下载地址官网
- 苹果宣布CEO乔布斯辞职 COO库克接任