zoukankan      html  css  js  c++  java
  • 性能优化:__dict__和__slots__

    __dict__

    • 类调用__dict__属性,返回类属性和方法的字字典
    • 实例调用__dict__属性,返回实例相关的属性和方法

    1. __dict__ 有什么用?基本定义是啥?

    • python 中__dict__存储了该对象的一些属性
    • 类和实例分别拥有自己的__dict__
    • 在__init__中声明的变量,会存到实例的__dict__中

    2.举个例子

    类的静态函数、类函数、普通函数、全局变量以及一些内置的属性都是放在类__dict__里的

     3.Python里哪些没有__dict__属性

    虽然说一切皆对象,但对象也有不同,就好比不是每个人的女朋友都是一个人一样,一些内置的数据类型是没有__dict__属性的

    int, list, dict等这些常用的数据类型是没有__dict__属性的,其实这是可预料的,就算给了它们dict属性也没啥用,毕竟它们只是用来做数据容器的。

    4.有继承关系的时候,来看看各自的__dict__

    __slots__

    • 默认情况下,类的实例有一个字典用于存储属性,这对于具有很少实例变量的对象会很浪费时间。当创建大量实例时,空间消耗可能变得尖锐。
    • 可以通过在类中定义__slots__声明接收一个实例变量序列,并在每个实例中只保留足够保存每个变量值的空间。因为没有为每个实例创建__dict__,所以节省空间
    class Base:
        # 指定类对象所能绑定的属性,限制类属性,Base类只能绑定name属性,其他属性绑定不上
        # 节约内存:定义了slot属性之后,那么该对象不会再自动生成__dict__属性
        __slots__ = ['name']
    
        def __init__(self, name):
            self.name = name
    
    b = Base('aa')
    # b.age = 10  'Base' object has no attribute 'age'
    
    # 'Base' object has no attribute '__dict__'
    print(b.__slots__)
  • 相关阅读:
    CSS3中三种清除浮动(float)影响的方式
    HTML中关于动态创建的标签无法绑定js事件的解决方法:.on()方法的 [.selector]
    Android 5.0以上heads up通知
    CoordinatorLayout
    ViewDragHelper
    Transition FrameWork
    Android启动过程
    不要滥用SharedPreference
    不要在Application中缓存数据
    SparseArray替代HashMap来提高性能
  • 原文地址:https://www.cnblogs.com/ella-li/p/14223443.html
Copyright © 2011-2022 走看看