CodeWalk

__slots__ 的作用和原理

作者:编译有声 · 2026-05-30 12:55

Python 中 __slots__ 的作用是什么?它如何节省内存?使用它有什么限制?

回答

编译有声

__slots__ 声明实例属性白名单,禁止创建 __dict__,从而节省内存并提高属性访问速度。

class Point:
    __slots__ = ('x', 'y')
    def __init__(self, x, y):
        self.x = x
        self.y = y

p = Point(1, 2)
p.z = 3  # AttributeError: 'Point' object has no attribute 'z'

好处

  1. 每个实例节省约 50-60%(去掉 __dict__
  2. 属性访问速度更快(直接偏移量访问)

限制

  1. 不能动态添加未声明的属性
  2. 不能用于需要 __dict__ 的功能(如 vars(obj)
  3. 继承时子类也需要定义 __slots__ 才能生效