当前位置 博文首页 > python中__slots__节约内存的具体做法

    python中__slots__节约内存的具体做法

    作者:小妮浅浅 时间:2021-08-04 18:18

    说明

    1、利用_slots__类属性,可以将实例属性存储在元zu中,大大节省了存储空间。

    2、所有属性都必须定义为__slots__元组,子类还必须定义__slots__。

    实例如果支持弱引用,需要在__weakref中添加__slots__。

    实例

    class Vector2d:
        __slots__ = ('__x', '__y')
     
        typecode = 'd'

    知识点扩展:

    __slots__

    ​ 如果在一个类中定义了__slots__属性,那么这个类的实例将不会拥有__dict__属性,没有__dict__的实例也就不能添加实例属性了。简单来说,__slots__的作用就是阻止类在实例化时为实例分配__dict__属性,限制该实例能添加的属性。

    作用

    ​ 通常情况下实例使用__dict__来存储自己的属性,它允许实例动态地添加或删除属性。然而,对一些在编译期就已经知道有什么变量的类或者不允许动态添加变量的类来说,它们并不需要动态地添加变量。如果想要限制实例属性,不想让它动态添加属性怎么办?比如我们只允许对A的实例添加name和age属性。

    ​ 为了达到上述目的,Python允许在定义class的时候,定义一个__slots__变量,来限制该class的实例能添加的属性。

    class A(object):
      __slots__ = ('age','name')
    a = A()
    a.name = 'xiaoming'
    a.age = 10
    a.id = 123456 #error  AttributeError: 'A' object has no attribute 'id'
    

    由于id不在__slots__中,所以实例不能添加id属性。任何试图给实例添加一个其名不在__slots__中的属性都将触发AttributeError异常。

    jsjbwy
    下一篇:没有了