使用__slots__
Python 动态属性绑定与 __slots__ 使用教程
1. Python 动态属性绑定
Python 作为动态语言,允许我们在运行时动态地为类和实例添加属性和方法。
1.1 动态绑定实例属性
1.2 动态绑定实例方法
注意:这种方式绑定的方法只对当前实例有效。
1.3 动态绑定类方法
2. 使用 __slots__ 限制实例属性
虽然动态绑定很灵活,但有时我们需要限制实例可以拥有的属性。
2.1 基本用法
2.2 继承中的 __slots__
- 默认情况下,
__slots__不会被子类继承 - 如果子类也定义了
__slots__,则允许的属性是子类和父类__slots__的并集
2.3 现代 Python 中的注意事项
- 性能考虑:
__slots__可以减少内存使用,因为实例不再需要__dict__字典 - 与描述符的交互:
__slots__会为每个属性创建描述符 - 与
@property的兼容性:__slots__不影响 property 的使用
3. 实际应用建议
- 当需要限制实例属性时使用
__slots__ - 对于大量实例的类,使用
__slots__可以节省内存 - 在框架开发中,
__slots__可以防止用户添加意外属性 - 注意
__slots__会阻止__dict__的创建,因此无法动态添加新属性
4. 示例代码
5. 总结
在现代 Python 开发中,合理使用 __slots__ 可以在保持代码清晰的同时提高性能,特别是在需要创建大量实例的情况下。

