📜  Python| __slots__ 的使用

📅  最后修改于: 2022-05-13 01:55:21.178000             🧑  作者: Mango

Python| __slots__ 的使用

当我们为类创建对象时,它需要内存,并且属性以字典的形式存储。如果我们需要分配数千个对象,则会占用大量内存空间。
插槽提供了一种特殊的机制来减小对象的大小。它是对对象进行内存优化的概念。

没有插槽的Python对象示例:

class GFG(object):
      def __init__(self, *args, **kwargs):
                self.a = 1
                self.b = 2
  
if __name__ == "__main__":
     instance = GFG()
     print(instance.__dict__)

输出 :

{'a': 1, 'b': 2}

因为Python中的每个对象都包含一个允许添加属性的动态字典。对于每个实例对象,我们都会有一个字典实例,它会消耗更多空间并浪费大量 RAM。在Python中,在创建对象以存储其所有属性时,没有分配静态内存量的默认功能。
__slots__ 的使用通过为固定数量的属性分配空间来减少空间浪费并加快程序速度。

带有插槽的Python对象示例:

class GFG(object):
      __slots__=['a', 'b']
      def __init__(self, *args, **kwargs):
                self.a = 1
                self.b = 2
  
if __name__ == "__main__":
     instance = GFG()
     print(instance.__slots__)

输出 :

['a', 'b']

如果我们使用 dict 的Python示例:

class GFG(object):
      __slots__=['a', 'b']
      def __init__(self, *args, **kwargs):
                self.a = 1
                self.b = 2
  
if __name__ == "__main__":
     instance = GFG()
     print(instance.__dict__)

输出 :

AttributeError: 'GFG' object has no attribute '__dict__'

将导致此错误。

使用 __slots__ 的结果:

  1. 快速访问属性
  2. 节省内存空间