我知道class foo(object)
是定义类的一种老式方法。但我想更加详细地了解这两者之间的区别。
我知道class foo(object)
是定义类的一种老式方法。但我想更加详细地了解这两者之间的区别。
方法解析顺序(MRO)。在菱形继承层次结构中(A同时从B和C继承,它们都从一个公共基类D继承),行为会有所不同。以前,方法是从左到右,深度优先查找的(即A B D C D)。但是如果C重载了D的成员,则A不会使用它(因为它首先找到了D的实现)。这对于各种编程风格很不好(例如使用混入类)。新式类将把此情况视为A B C D(查看类的__mro__属性以查看它将搜索的顺序)
__new__
构造函数被添加,它允许类作为工厂方法,而不是返回类的新实例。有用于返回特定的子类,或重用不可变对象而无需更改创建接口。
描述符。这是支持属性、classmethods、staticmethods等的功能。本质上,它们提供了一种控制在(新式)类上访问或设置特定属性时会发生什么的方法。
class foo(object):
是声明类的“新”方法。
这个改变是在Python 2.2版本中进行的。请参阅这个PEP详细解释差异。
继承object
可以创建新式类。新式类有两个著名的好处: