博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 中类中 __slots__
阅读量:5811 次
发布时间:2019-06-18

本文共 1216 字,大约阅读时间需要 4 分钟。

  hot3.png

__slots__

By default, instances of both old and new-style classes have a dictionary for attribute storage. This wastes space for objects having very few instance variables. The space consumption can become acute when creating large numbers of instances.

默认 ,旧的和新式类 有一个存储属性的字典。这会浪费一个拥有很少实例变量对象的空间。当创建大量实例的时候,空间消耗变的很严重。

__slots__

This class variable can be assigned a string, iterable, or sequence of strings with variable names used by instances. If defined in a new-style class, __slots__ reserves space for the declared variables and prevents the automatic creation of__dict__ and __weakref__ for each instance.

这个类的变量可以指定为字符串 可迭代的对象  字符串序列与变量使用的名称的实例。如果定义在一个新型的类,__slots__ 会存储声明变量的空间并阻止自动创建那些不必要的变量,其实就是保护那些一开始创建变量的空间,再想创建,不让你创建了。

class A(object):

    __slots__ = "x"
abc = A()
abc.x = "xxx"
print abc.x

XXX

class A(object):

    __slots__ = "x"
abc = A()
abc.y = "yyy"
print abc.y 

Note:  AttributeError: 'A' object has no attribute 'y'

属性被固定是X,再想往里面加,不让了。所以报错。

下面是个特列:

class A(object):

    pass
class B(A):
    __slots__='b'
    b = "bbb"
c = B()
print c.b

以上正常打印 bbb

class A(object):

    pass
class B(A):
    __slots__='b'
    b = "bbb"
c = B()
c.e = "eee"
print c.e

e没有定义在__slots__中,也能打印了,这里是B继承了A

转载于:https://my.oschina.net/012345678/blog/150369

你可能感兴趣的文章
Mysql 数据库系列
查看>>
Django源码学习 了解render与render_to_response
查看>>
mysql 原理 ~ 事务隔离机制
查看>>
实景三维系列3 | 航测厂商的苦恼
查看>>
golang os/exec 执行外部命令
查看>>
《运筹学基础及应用》习题1.3(b)
查看>>
条件变量使用不当引起的虚假唤醒
查看>>
MVC一个action对应多个视图的写法
查看>>
真心佩服 那些有时间写博客的人。
查看>>
VMware 中windows server 之DHCP 搭建与测试
查看>>
fopen中r+和w+的区别
查看>>
C# 加密–RSA前端与后台的加密&解密
查看>>
kindeditor的配置jsp版
查看>>
JAVA访问Hbase
查看>>
Android数据库 — — —查询数据
查看>>
2011大连网络赛
查看>>
TCP三次握手四次分手
查看>>
This concludes part 3 of the ghd uk
查看>>
Codeforces Round #372 (Div. 2) C. Plus and Square Root
查看>>
Maven项目启动报错:java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
查看>>