• __slots__用法以及优化


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

    __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__

  • 相关阅读:
    配置Podfile 一个工程内的多个Target
    iOS开发中的测试框架
    iOS 设置button文字过长而显示省略号的解决办法
    iOS界面的绘制和渲染
    iOS单元测试
    iOS消息转发机制
    对runtime的总结:让你会用Runtime
    Xcode的Refactor使用
    工厂设计模式
    iOS中的数据存储
  • 原文地址:https://www.cnblogs.com/piperck/p/6051161.html
Copyright © 2020-2023  润新知