Python 类的特殊变量:__slots__

使用 __slots__ 后,类中 __weakref____dict__ 消失,同时阻止动态属性绑定

由于 __dict__ 记录着类中所有的属性,占用空间比较多,所以可以在大量实例存在时节省内存空间

class Test1(object):
__slots__ = ['attr1', 'attr2'] def __init__(self, attr1, attr2):
self.attr1 = attr1
self.attr2 = attr2 class Test2(object):
def __init__(self, attr1, attr2):
self.attr1 = attr1
self.attr2 = attr2 if __name__ == '__main__':
test1 = Test1('attr1', 'attr2')
print(Test1.__dict__) test2 = Test2('attr1', 'attr2')
test2.attr3 = 'attr3'
Test2.attr4 = 'attr4'
print(test2.__dict__)
print(Test2.__dict__)

继承的子类如果不使用 __slots__ 并不受影响,如果使用则允许定义的是本身的 __slots__ 加上父类的 __slots__

Python __slots__的更多相关文章

  1. Python __slots__限制动态添加变量

    Python是一种非常灵活的动态语言,有时感觉太灵活以至于不知道遵循什么样的规则去驾驭.不过Python已经是非常完备的语言,想实现什么样的功能都是有方法的,而且也很容易,比如限制一个类动态添加成员变 ...

  2. python __slots__使用详解

    1.动态添加属性 class Lang(object): def __init__(self,name,score): self.name=name self.score=score def lang ...

  3. python __slots__ 详解(上篇)

    转自:http://blog.csdn.net/sxingming/article/details/52892640 python中的new-style class要求继承Python中的一个内建类型 ...

  4. Python __slots__的使用

    每个类在实例化时都会被分配一个dict,通过 实例.__dict__来访问,dict记录了实例的所有属性 如: class Man(object): pass man = Man()print(man ...

  5. Python __slots__ 作用

    参考:https://blog.csdn.net/u010733398/article/details/52803643   https://blog.csdn.net/sxingming/artic ...

  6. 链表(python)

    链表1.为什么需要链表顺序表的构建需要预先知道数据大小来申请连续的存储空间,而在进行扩充时又需要进行数据的搬迁,所以使用起来并不是很灵活.链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理. ...

  7. Python—使用__slots__限制实例的属性

    如果我们想要限制实例的属性怎么办?比如,只允许对Student实例添加name和age属性. 为了达到限制的目的,Python允许在定义class的时候,定义一个特殊的__slots__变量,来限制该 ...

  8. Python的高级特性6:使用__slots__真的能省很多内存

    在伯乐在线上看到了这篇文章,用Python的 __slots__ 节省9G内存,于是想测试下,对单个类,用__slots__节省内存效果会不会明显. 看完这个例子后,我们也会明白__slots__是用 ...

  9. [Python] dir() 与 __dict__,__slots__ 的区别

    首先需要知道的是,dir() 是 Python 提供的一个 API 函数,dir() 函数会自动寻找一个对象的所有属性,包括搜索 __dict__ 中列出的属性. 不是所有的对象都有 __dict__ ...

随机推荐

  1. windows搭建成代理服务器 CCProxy

    1.软件下载地址 http://www.ccproxy.com/ 2.账号激活 CCProxy无限用户版序列号:JHEHIHCDDAHC注册码:15f7f78febfaee55afeafefff7cb ...

  2. 201871010113-刘兴瑞《面向对象程序设计(java)》第十六周学习总结

    项目 内容 这个作业属于哪个课程 <任课教师博客主页链接>https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 <作业链接地址>http ...

  3. acwing 835. Trie字符串统计

    地址  https://www.acwing.com/problem/content/description/837/ 维护一个字符串集合,支持两种操作: “I x”向集合中插入一个字符串x: “Q ...

  4. poj 3233 矩阵快速幂

    地址 http://poj.org/problem?id=3233 大意是n维数组 最多k次方  结果模m的相加和是多少 Given a n × n matrix A and a positive i ...

  5. 一个页面从输入url到加载到内容,这个过程经历了什么

    首先,当浏览器接收到url,会查看本地缓存(浏览器缓存-系统缓存-路由器缓存)中是否有,有则直接显示 没有则进行DNS域名解析,将域名解析成IP地址,通过ip地址去访问相应的服务器, 浏览器访问服务器 ...

  6. nui-app 笔记

    https://uniapp.dcloud.io

  7. 【STM32H7教程】第28章 STM32H7时间关键代码在ITCM执行的超简单方法

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第28章       STM32H7时间关键代码在ITCM执行 ...

  8. LeetCode 205:同构字符串 Isomorphic Strings

    题目: 给定两个字符串 s 和 *t*,判断它们是否是同构的. 如果 s 中的字符可以被替换得到 *t* ,那么这两个字符串是同构的. 所有出现的字符都必须用另一个字符替换,同时保留字符的顺序.两个字 ...

  9. IT兄弟连 Java语法教程 流程控制语句 循环结构语句4

    do-while循环 Java还有一种循环是do-while.与for.while这些在循环顶部判断条件表达式的语句不同,do-while是在循环底部进行条件表达式的检查.这意味着do-while循环 ...

  10. Java8接口新特性

    概述 Java 8中,你可以为接口添加静态方法和默认方法.从技术角度来说,这是完全合法的,只是它看起来违反了接口作为一个抽象定义的理念.猜想设计初衷可能使为了兼容8以下的jdk Java8出来了个函数 ...