在 Python 中,类分为新式类和经典类:
新式类:
- 新式类是从 Python 2.2 开始引入的类定义方式。
- 新式类的基类是
object
或其子类。 - 新式类遵循 C3 线性化算法,实现了更加一致的方法解析顺序(Method Resolution Order, MRO)。
- 新式类支持更多的高级特性,如
super()
函数、属性(property)、slots 等。
经典类:
- 经典类是 Python 2 中默认的类定义方式,源自 Python 1.
- 经典类没有统一的基类,可以不继承任何类。
- 经典类的方法解析顺序(MRO)遵循深度优先、从左到右的规则,可能会导致一些意想不到的行为。
- 经典类支持的特性相对较少,不支持
super()
函数等高级特性。
主要区别:
继承和 MRO:
- 新式类使用 C3 线性化算法,MRO 更加一致和可预测。
- 经典类使用深度优先、从左到右的 MRO 规则,可能会导致一些意外情况。
高级特性:
- 新式类支持更多的高级特性,如
super()
函数、属性(property)、slots 等。 - 经典类支持的特性相对较少。
- 新式类支持更多的高级特性,如
兼容性:
- 在 Python 3 中,所有类都被视为新式类。
- 在 Python 2 中,如果不显式继承
object
,则类默认为经典类。
总的来说,新式类是 Python 发展的趋势,具有更好的特性和表现。在 Python 3 中,所有类都是新式类,无需关注这个问题。但在 Python 2 中,如果需要使用更多高级特性,建议显式继承 object
定义新式类。