__slots__用于限制允许实例动态绑定的属性,__slots__中没有定义的属性实例无法动态绑定(这是__slots__的表面意义)

__slots__只能限制实例绑定属性,无法限制类绑定属性

__slots__只能限制定义了此__slots__的类实例化出来的实例,无法限制继承了此类的子类实例化出来的实例

如果子类也定义了__slots__,那么实际生效的范围是父类与子类__slots__的集合

有如下的坑点和额外作用:

在不使用__slots__时,类属性与实例属性的关系如下:在不定义实例属性时,实例属性跟着类属性走;重新定义了实例属性后会发生覆盖,覆盖之后实例属性与类属性就没有了关系。即使修改类属性也不再影响实例属性

在类定义了__slots__的情况下,一旦类再绑定了__slots__中规定的属性,那么所有实例的该属性都会跟着类属性走,而且实例的此属性再也无法做原地修改之外的修改(与数据类型可变不可变有关),只有类才能做原地修改之外的修改。

相当于在内存中,类属性和所有实例的属性都指向了一块内存,这样一来与不使用__slots__相比,在某些场景下就可以更好地分配并节省内存,这也是__slots__存在的深层意义。

转载于:https://www.cnblogs.com/zhangzhaoyu/p/9234979.html

python的__slots__相关推荐

  1. 通过Python的__slots__节省9GB内存

    我们之前提到过,Oyster.com基于Python的web服务器缓存了大量Python字典(dicts)(哈希表(hash tables))的静态内容.好啦,我们最近使用一行代码--在我们的Imag ...

  2. python的`__slots__`属性

    1. 引言 我们先看一个问题: 对象(通过类实例化后的对象)如何储存自己的属性? 1.1. 默认情况下:对象如何储存自己的属性 为了说明这个问题, 我们先在交互式模式中做一个简单的测试: >&g ...

  3. Python:__slots__()方法和@property方法

    1.__slots__ 1.python作为一个动态语言,可以在创建一个class类后,给类进行绑定属性和方法.但是当我们想要限制实例的属性和方法时怎么办?这个时候就可以用到__slots__()方法 ...

  4. python 使用__slots__来限制类的实例属性的数量

    正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性.先定义class: class Student(object):pas ...

  5. python 之 __slots__

    一.背景 python 动态语言,可以在运行过程中,修改实例的属性和增删方法 Python有时我们只想使用固定的属性,不想任意绑定属性 __slots__ 作用 限制对象属性的添加,限制类的实例使用的 ...

  6. Python中__slots__的使用

    摘要 当一个类需要创建大量实例时,可以通过__slots__声明实例所需要的属性, 例如,class Foo(object): __slots__ = ['foo'].这样做带来以下优点: 更快的属性 ...

  7. Python: `__slots__`

    __slots__ ''' __slots__是什么:是一个类变量,变量值可以是列表,元祖,或者可迭代对象,也可以是一个字符串(意味着所有实例只有一个数据属性) 引子:使用点来访问属性本质就是在访问类 ...

  8. Python 面向对象 —— __slots__ 与 @property(python 下的 getter、setter 方法)

    1. 使用 __slots__ 限制 class 的属性 class Student(object):__slots__ = {'name', 'age'}# 集合# 也只允许绑定 name,age ...

  9. python之__slots__

    一,先谈谈不使用__slots__,通常定义完class,给实例绑定属性与方法,对另一个实例没有作用的 from types import MethodTypeclass Hero (object): ...

  10. python基础——使用__slots__

    python基础--使用__slots__ 正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性.先定义class: cla ...

最新文章

  1. tensorflow 入门
  2. 智能算法PSO的图例分析
  3. matlab 并联机械臂_MATLAB robot toolbox 机械臂轨迹规划
  4. 机器学习(2.sklearn(Scikit-learn)库、字典数据的特征抽取)
  5. 每天一道LeetCode-----将数组/链表后k个元素移动到前面
  6. Android之严苛模式(StrictMode)
  7. 说说 C 语言中的变量与算术表达式
  8. AngularJS中service,factory,provider的区别(转载:http://my.oschina.net/tanweijie/blog/295067)...
  9. java 线程 主进程_java 多线程通用方法
  10. mybatis如何在控制台打印执行的sql语句
  11. 网络拓扑Visio式的定制
  12. Oracle定时器执行多线程
  13. 把生活过的像模像样已经很不容易
  14. DNN硬件加速器设计1 -- 序(MIT)
  15. redis集群(服务端sharding)
  16. 33 - Guarded Suspension模式 等待唤醒机制的规范
  17. 高通与NVIDIA在物联网芯片交锋,争相引入AI
  18. 小米嵌入式工程师面试-心得
  19. 三大运营商发春,要向腾讯劫个色
  20. 一键“拉取”链上数据 海淀区应用遍地开花

热门文章

  1. 游戏开发之使用类封装动态数组(vector)(C++基础)
  2. Python处理多种编码报错的处理
  3. BZOJ5262(容斥)
  4. Python: str.split()和re.split()的区别
  5. Sublime Text2.0.2注册码,添加python编译系统:
  6. 分布式搜索Elasticsearch——QueryBuilders.matchPhrasePrefixQuery
  7. 中国“互联网+酒店”专题研究报告2015
  8. jQuery CSS 添加/删除类名
  9. mysql jdbc 驱动 下载地址官网
  10. 苹果宣布CEO乔布斯辞职 COO库克接任