你是否应该使用槽(Slots)?槽对你的类有何影响,以及何时以及如何使用它们

你是否应该使用槽?槽对类的影响以及何时如何使用它们

一行代码提高 20% 的性能?

(image by Sébastien Goldberg on Unsplash)

Slots 是一种机制,允许您声明类属性并限制创建其他属性。您可以确定类具有哪些属性,防止开发人员动态添加新属性。这通常会导致 20% 的速度提升。

Slots 在具有已知属性集合的大量类实例的程序中特别有益。想象一下视频游戏或物理模拟;在这些情况下,您需要随时间追踪大量实体。

您可以通过添加一行代码将 slots 添加到您的类中,但这是否总是一个好主意?在本文中,我们将探讨使用 slots 如何使您的类更快以及何时使用它们。总体目标是更好地理解 Python 类的内部工作原理。让我们开始编码吧!

Slots 使 Python 类更快

通过使类使用 slots,您可以改善类的内存使用和性能。使用 slots 的类占用更少的内存并执行更快。

如何使我的类使用 slots?

告诉 Python 让一个类使用 slots 非常简单。您只需添加一个特殊属性,称为 __slots__,指定所有其他属性的名称:

class Person:  first_name:str  last_name:str  age:int    __slots__ = ['first_name', 'last_name', 'age']    # <-- 这里添加了 slots  def __init__(self, first_name:str, last_name:str, age:int):    self.first_name = first_name    self.last_name = last_name    self.age = age

在上面的类中,我们可以看到 Person 有三个属性: first_namelast_nameage。我们可以通过添加 __slots__ 属性来告诉 Python 我们希望 Person 类使用 slots。这个属性必须指定所有其他属性的名称。