Python中的__slots__
class Person:
__slots__ = ('name', 'age')
在上面的示例中,Person类只允许拥有name和age两个属性。
3. __slots__的一些注意事项
- 使用
__slots__会覆盖__dict__的存在,因此对象将不再有__dict__属性。 - 定义了
__slots__的类的实例不支持动态添加新属性。 __slots__的元组中的属性名不能以__开头。- 对象的内存布局会因为使用
__slots__而发生改变。
4. 使用示例
让我们通过一个示例来演示__slots__的用法和效果。
class Person:
__slots__ = ('name', 'age')
person1 = Person()
person1.name = 'Alice'
person1.age = 25
print(person1.name)
print(person1.age)
person1.gender = 'female' # 试图为对象添加新属性
运行上面的代码会得到以下输出:
Alice
25
AttributeError: 'Person' object has no attribute 'gender'
从输出中可以看出,Person类的实例只允许拥有name和age两个属性,试图为其添加其他属性会引发AttributeError异常。
5. 总结
通过使用__slots__,我们可以限制对象可以拥有的属性的类型和数量,从而节省内存空间并提高代码执行效率。不过在使用时需要注意__slots__的一些限制和注意事项,在合适的情况下使用__slots__可以带来一定的性能提升。
极客笔记