其实也是无意之中又看到这个东西,这次索性再记一下,免得下次忘记又再看一遍,往复循环浪费了太多时间。

__slots__其实我做项目这么久还没有主动使用过。下面reference有提到这么一句话

Warning: Don’t prematurely optimize and use this everywhere! It’s not great for code maintenance, and it really only saves you when you have thousands of instances.

不要过早优化和到处使用。这会让代码变得难以维护,所以当你真的存储好几千实例的时候再来考虑这个问题吧。

跟下面进入正题 介绍一下__slots__

在申明了__slots__的类里面将不会再有__dict__和__weakref__魔法方法的存在了。我们申明在对象和类中的属性,其实都是存储在__dict__之中的。砍掉了__dict__相当于砍掉了一坨存储字典对象的容器,而且在初始化新类对象的时候,新的对象也不会再有__dict__方法,这样将大大节约一批内存的使用。下面reference节省内存的文章实际上就是通过固定类对象可以使用的属性,砍掉__dict__从而达到节省内存的目的(前提是你真的会实例化成千上万个该对象,比方说user对象之类)。 使用__slots__也有不好的地方,降低了代码的维护性和灵活性,无法再让动态语言的灵活性得到充分展现。

另外__slots__方法不会影响property装饰器装饰的属性。 调用函数也不会受到影响。

class T(object):
# __slots__ = ['name', 'pp', 'l', '__dict__'] def __init__(self):
self.name = 'ahhaa'
self.pp = 'qweqwe'
self.l = 'asdasd' def bb(self):
return 'oy you remember that' @property
def gg(self):
return 'nimei' print T.__dict__
print T().gg

Reference:

http://tech.oyster.com/save-ram-with-python-slots/  Saving 9 GB of RAM with Python’s __slots__

__slots__用法以及优化的更多相关文章

  1. mysql的limit经典用法及优化

    用法一   SELECT `keyword_rank`.* FROM `keyword_rank` WHERE (advertiserid='59') LIMIT 2 OFFSET 1;   比如这个 ...

  2. MySQL的limit用法及优化(转)

    常规用法: 用法一: OFFSET ; 比如这个SQL ,limit后面跟的是2条数据,offset后面是从第1条开始读取. 用法二: ,; 而这个SQL,limit后面是从第2条开始读,读取1条信息 ...

  3. Postgresql基本用法以及优化注意

    本篇为之前学习PG数据库一些基本操作使用以及优化注意. 比较运算符  = :  <>,!=,<= , <,>=,>: 不能用于null判断; Between: Le ...

  4. __slots__用法

    class Test(object): __slots__ = ("name","age") t = Test() t.name = "老王" ...

  5. Mysql中Join用法及优化

    Join的几种类型 笛卡尔积(交叉连接) 如果A表有n条记录,B表有m条记录,笛卡尔积产生的结果就会产生n*m条记录.在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者直接用f ...

  6. Python如何动态的为对象添加方法或属性,__slots__用法

    代码示例如下: import types    #使用MethodType方法需要导入包 class test(object):  #定义 一个test类,包含name属性和f()方法 def __i ...

  7. SQL里IN的用法以及优化

    1.in后条件不多,可以考虑主表建索引,或用union all 代替 2. in 和 exists的区别: 如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用in, 反之如果外层的主查 ...

  8. mysql中event的用法详解

    一.基本概念mysql5.1版本开始引进event概念.event既“时间触发器”,与triggers的事件触发不同,event类似与linux crontab计划任务,用于时间触发.通过单独或调用存 ...

  9. php分享二十:mysql优化

    1:垂直分割 示例一:在Users表中有一个字段是家庭地址,这个字段是可选字段,相比起,而且你在数据库操作的时候除了个人信息外,你并不需要经常读取或是改写这个字段.那么,为什么不把他放到另外一张表中呢 ...

随机推荐

  1. jvm虚拟机分享课笔记

    深入理解jvm虚拟机分享 1. jvm执行流程 java-编译-.class—类加载器(随时随地加载)--[进入java虚拟机] 执行引擎—本地方法接口---本地方法库 运行时数据区 2. 运行时数据 ...

  2. Linux系统中将普通用户添加到sudoers

    我们经常会在普通用户下用到sudo命令,为了不用频繁切换root用户,我们可以将普通用户添加到sudoers里面.Linux默认是没有将用户添加到sudoers列表中的,需要root手动将账户添加到s ...

  3. [转]Win7 + Ubuntu 18.04 LTS (Bionic Beaver)双系统安装方法

    这里介绍在win7的基础上,安装ubuntu 18.04 LTS,实现双系统启动. 首先,假设你已安装了windows 7系统. 一. 制作ubuntu U盘启动盘. 方法见http://blog.p ...

  4. ASP 基础二 内置对象

    一 Request 二 Response 三 Application 四 Session 五 Server <script language="vbscript" runat ...

  5. Android学习之基础知识四-Activity活动8讲(活动的灵活运用)

    一.判断当前是在哪个活动 1.我们还是接着上一讲的代码,首先创建一个Java类:BaseActivity.java.这个类我们不作为一个活动,也不在AndroidManifest.xml中注册,它只是 ...

  6. Android 仿携程活动列表边框布局

    实现如下图所示的一个页面布局 布局框架 思路讲解: 1.一开始的思路是使用android提供的画布将布局中的内容花下来,之后想了想觉得比较麻烦,所以又开启了另外一条思路. 2.如上图“布局框架”所示. ...

  7. MySql 数据库移植记录

    在使用长文本时,SqlServer 在以下情况下工作正常 [Property("CContent", ColumnType = "StringClob", Le ...

  8. CYJian的水题大赛

    实在没忍住就去打比赛了然后一耗就是一天 最后Rank19还是挺好的(要不是乐多赛不然炸飞),这是唯一一套在Luogu上号称水题大赛的而实际上真的是水题大赛的比赛 好了我们开始看题 T1 八百标兵奔北坡 ...

  9. [Spark][Python]DataFrame select 操作例子

    [Spark][Python]DataFrame中取出有限个记录的例子 的 继续 In [4]: peopleDF.select("age")Out[4]: DataFrame[a ...

  10. bitcoin 源码解析 - 交易 Transaction(三) - Script

    bitcoin 源码解析 - 交易 Transaction(三) - Script 之前的章节已经比较粗略的解释了在Transaction体系当中的整体运作原理.接下来的章节会对这个体系进行分解,比较 ...