每个类在实例化时都会被分配一个dict,通过 实例.__dict__来访问,dict记录了实例的所有属性

如:

class Man(object):
pass man = Man()
print(man.__dict__) # 输出的结果是 {}
man.name = 'Hel'
man.length = '152'
print(man.__dict__) # 输出的结果是 {'name': 'Hel', 'length': '152'}

变量__slots__是class从object继承的一个属性,用来定义类的可以绑定的属性,当在类中定义了__slots__之后,这个类就只能拥有定义的属性,同时该类的实例不能分配__dict__.

class Man(object):
__slots__ = ('age', 'length', 'name') print(man.__dict__) # 输出AttributeError: 'Man' object has no attribute '__dict 类的实例只能有slots定义的属性,如果使用定义之外的属性,将会报错
class Man(object):
__slots__ = ('age', 'length', 'name') man = Man()
man.name = 'Hel'
man.length = '152'
man.gender = 'male' # 输出AttributeError: 'Man' object has no attribute 'gender'

一般情况下,使用__slots__的类需要直接继承(object)

在继承自己创建的类时,不会继承__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__

    Python 类的特殊变量:__slots__ 使用 __slots__ 后,类中 __weakref__ 和 __dict__ 消失,同时阻止动态属性绑定 由于 __dict__ 记录着类中所有的属 ...

  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. 强震记录和GPS记录,地震波记录的区别

    强震记录的是加速度数据,但gps记录的是位移数据.这样的话,强震记录应该说是近场地震数据: 那么, 为什么不干脆用近场的地震波仪器呢,是因为,地震仪记录会限幅,导致记录不全.

  2. python如何进行内存管理的

    python引用了一个内存池(memory pool)机制,即pymalloc机制(malloc:n,分配内存),用于管理对小块的申请和释放.

  3. 用Java批量重命名文件

    要事先在C盘里创建“照片”和“照片1”两个文件夹 1import java.io.*; public class Jack { public static void main(String[] arg ...

  4. SQL注入之Sqli-labs系列第十九关(基于头部的Referer POST报错注入)

    开始挑战第十八关(Header Injection- Referer- Error Based- string) 先来说下HTTP Referer: HTTP Referer是header的一部分,当 ...

  5. 异常值检测 —— MAD(median absolute deviation)

    MAD 定义为,一元序列 Xi" role="presentation">XiXi 同其中位数偏差的绝对值的中位数(deviation,偏差本身有正有负): MAD ...

  6. TCP三次握手及释放连接详解(转)

    一.TCP头部简介 ACK :即确认字符,在数据通信中,接收站发给发送站的一种传输类控制字符.表示发来的数据已确认接收无误.TCP报文格式中的控制位由6个标志比特构成,其中一个就是ACK,ACK为1表 ...

  7. Android.mk使用第三方库方法

    /********************************************************************** * Android.mk使用第三方库方法 * 说明: * ...

  8. Java中的参数列表

    一. 什么是参数列表 当你在编写一个函数时,你不知道函数形参的类型或者是形参的长度时,你就可以使用参数列表来代替. 样式: public void f(Object...objects) { Syst ...

  9. Angular 组件

    1 2 change是TimepickerDemoCtrl上的,mytime在timepicker内部改变生效就会触发 3 timepicker内部绑定TimepickerDemoCtrl对值的监控 ...

  10. XXS level4

    (1)查看PHP源代码 <?php ini_set("display_errors", 0); $str = $_GET["keyword"]; $str ...