__slots__方法的作用

125 阅读1分钟

__slots__方法的作用

限制类实例的属性,以减少内存使用并提高性能。以下是相关要点和示例:# __slots__ 是 Python 中的一种机制,用于限制类实例的属性,以减少内存使用并提高性能。

作用

  1. 限制属性:定义哪些属性可以在类实例中使用。
  2. 节省内存:避免为每个实例创建 __dict__,从而节省内存。
  3. 提高性能:访问 __slots__ 中定义的属性速度更快。

示例代码

class Point:
    __slots__ = ['x', 'y']  # 限定只允许 x 和 y 属性

    def __init__(self, x, y):
        self.x = x
        self.y = y

# 创建实例
p = Point(1, 2)

# 访问属性
print(p.x, p.y)  # 输出: 1 2

# 尝试添加新属性
try:
    p.z = 3  # 会引发 AttributeError
except AttributeError as e:
    print(e)  # 输出: 'Point' object has no attribute 'z'

要点

  • 使用 __slots__ 只在需要大量实例且需节省内存时推荐。
  • 不能使用 __slots__ 的子类无法访问父类动态属性。
  • 适用于简单的类,复杂类可能不适用此机制。

通过 __slots__,可以在需要时有效控制类的实例属性,提高内存效率。