{site_name}

{site_name}

🌜 搜索

Python的 __slots__ 是一种特殊的类属性,它用于限制实例对象可以动态添加的属性

Python 𝄐 0
pythonslots
Python的 __slots__ 是一种特殊的类属性,它用于限制实例对象可以动态添加的属性。通过使用 __slots__,我们可以在定义类时显式地指定一个固定的属性集合,从而避免了在实例化后动态添加新属性所带来的额外内存开销。

具体来说,当一个类包含了 __slots__ 属性时,Python会为该类的每个实例对象分配一个固定大小的内存空间,这个空间不再支持动态扩展。因此,如果我们尝试为一个被 __slots__ 修饰的实例对象添加新属性,Python解释器将抛出 AttributeError 异常。

下面是一个使用 __slots__ 属性限制实例属性的例子:

python
class Person:
__slots__ = ('name', 'age')

def __init__(self, name, age):
self.name = name
self.age = age

# 创建实例对象并设置属性值
p = Person('Alice', 25)
print(p.name) # 输出 'Alice'
print(p.age) # 输出 25

# 尝试动态添加新属性
try:
p.gender = 'female' # 抛出 AttributeError 异常
except AttributeError as e:
print(e)


在上面的代码中,我们定义了一个名为 Person 的类,并在其中使用 __slots__ 属性指定了实例对象可以拥有的属性名。在实例化对象之后,我们可以为其设置 name 和 age 属性的值,并且这些属性将被正确地保存。然而,当我们尝试为实例对象添加一个名为 gender 的新属性时,Python解释器会抛出 AttributeError 异常,因为该属性不在 __slots__ 属性中指定的属性集合中。