当一个类需要创建大量实例时,可以通过__slots__声明实例所需要的属性,

优点:

1)更快的属性访问速度

2)减少内存消耗

3)限定一个类创建的实例只能有固定的实例属性(实例变量),不允许对象添加列表以外的实例属性

4)防止用户因错写属性名称而发生程序错误

缺点:

1)每个继承的子类都要重新定义一遍__slots__

实例只能包含哪些在__slots__定义的属性,这对写程序的灵活性有影响,比如你由于某个原因新网给instance设置一个新的属性,比如instance.a = 1, 但是由于a不在__slots__里面就直接报错了,你得不断地去修改__slots__或者用其他方法迂回的解决

2)实例不能有弱引用(weakref)目标,否则要记得把__weakref__放进__slots__

所以实例不超过万级别的类,__slots__是不太值得使用的

说明

1. __slots__ 属性是一个列表,列表的值是字符串

2. 含有__slots__属性的类所创建的实例对象没有__dict__属性,即此实例不用字典来存储属性

举个栗子

用slots定义基本属性的简单例子

参考:

https://blog.51cto.com/calabash/2137331

https://www.jb51.net/article/118024.htm

python 类的属性__slots__ (了解一点点)的更多相关文章

  1. python类:属性

    http://blog.csdn.net/pipisorry/article/details/50708616 Python 中的 property 属性 Python中有个很赞的概念,叫做prope ...

  2. Python 类的属性再解

    #类的属性 class A(): #定义一个类的属性,类似于c++中的静态变量 num=0 def __init__(self): #实例对象属性定义赋值 self.name = "hha& ...

  3. Python 类的属性和实例属性 Python 的动态语言

    #定义一下类, 含有类属性 aaa, >>> class Aa: ... aaa = 10... #对类 Aa实例化出一个实例 a1>>> a1 = Aa() &g ...

  4. python类对象属性查找原理

    class Foo(object): def __init__(self): # 这是一个对象属性 self.obj_pro = 12 # 这是一类属性 c_pro = 11 # 这是一个静态方法 @ ...

  5. python类中属性逗号引发的类型改变

    不注意点了个逗号引发了类型改变 [shangbl@newsvn ~]$ cat test.py class AB1: a="a" class AB12: a="a&quo ...

  6. Python类属性,实例属性

    1.Python类数据属性:定义在类里面但在函数外面的变量,它们都是静态的. #一段很简单的代码,但反应了很多 >>> class A(): a=1 #一个类里面有个属性a > ...

  7. python类的__slots__属性、__del__属性、上下文(__enter__和__exit__)、

    常规情况下,类的属性字典是共享的,而实例的字典是独立的.如果一个类的属性较少,但是拥有很多的实例,这些实例的属性字典会占用较多的内存空间.对这样的类来说,为了节省内存空间,可以使用__slots__类 ...

  8. Python笔记(4)类__属性与描述符

    部分参考自:http://www.geekfan.net/7862/ 新式类与经典类 2和3不一样,3都是新式类. 新式类和经典类的区别: class A: #classic class " ...

  9. guxh的python笔记六:类的属性

    1,私有属性 class Foo: def __init__(self, x): self.x = x 类的属性在实例化之后是可以更改的: f = Foo(1) print(f.x) # 1 f.x ...

随机推荐

  1. HTML5冲刺

    html5特性及知识点 1.新标签1)div语义不强,针对结构部署,提供了以下新标签nav/main/header/footer/article/asideie9将把以上元素全部解析为行内元素,引入第 ...

  2. 22 使用ArcMap 连接Server提示【远程服务器收到了错误的地址】

    情景一: 软件:ArcMap.对应版本ArcGIS server 可能是用了FQ软件 解决办法:打开浏览器设置,如谷歌浏览器,高级设置,系统下--打开代理设置--局域网设置--取消勾选  使用自动配置 ...

  3. 微信小程序底部tabbar

    在 app.json    文件里面 : { "pages":[ "pages/index/index", "pages/logs/logs" ...

  4. Selenium 3----WebDriver常用方法

    在学会定位元素的基础上,进行元素的操作. WebDriver常用方法: clear(): 清除文本. send_keys (value): 模拟按键输入. click(): 单击元素. submit( ...

  5. reference to 'map' is ambiguous|

    reference to 'map' is ambiguous| c++编译出现此错误    表明定义的变量名字map和库函数map冲突而产生歧义

  6. 栈->栈的应用

    e.g.1 数制转换 十进制数N和其它d进制数的转换是计算机实现计算的基本问题,其解决方法很多,其中一个简单算法基于下列原理. 假设编写一个程序:对于输入的任意一个非负十进制整数,打印输出与其等值的八 ...

  7. 线性表->顺序存储

    文字描述: 用一组地址连续的存储单元依次存储线性表的数据元素,只要确定了存储线性表的起始位置,线性表中任一数据元素都可随机存取,所以线性表的顺序存储结构是一种随机存取的存储结构. 即是,线性表的顺序存 ...

  8. find 详解

    find 详解 原文请访问http://itlab.idcquan.com/linux/SHELL/949102.html 当最初登录到系统中时, u m a s k命令确定了你创建文件的缺省模式.这 ...

  9. Git常用功能记录

    1. git查看某个文件的修改历史 git log --pretty 然后使用下面的命令可列出文件的所有改动历史,注意,这里着眼于具体的一个文件,而不是git库,如果是库,那改动可多了去了- git ...

  10. IIS网站 由http协议改变为https协议

    https://www.cnblogs.com/boosasliulin/p/6811231.html?utm_source=itdadao&utm_medium=referral