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__ 属性中指定的属性集合中。
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__ 属性中指定的属性集合中。
本文地址:
/show-273579.html
版权声明:除非特别标注原创,其它均来自互联网,转载时请以链接形式注明文章出处。