我已经阅读了很多关于Python文档中的对象的内容,它们在某些方面区分了这两个:
任何人都可以向我解释这个“旧式(或经典)和新式”。
我无法弄清楚这条线试图说的是什么:
“对于新式类,方法解析顺序动态变化以支持对super()的协作调用”。
答案 0 :(得分:6)
旧班风格:
class BaseClass:
def m1(self):
return 1
class MyClass(BaseClass):
def m1(self):
return BaseClass.m1(self)
新课程风格:
class BaseClass(object):
def m1(self):
return 1
class MyClass(BaseClass):
def m1(self):
return super(MyClass, self).m1()
使用新的类样式有很多可能性,例如:
super(classname, ...).method()
代替parentclassname.method(...)
。父方法现在由MRO确定(之前,由您确定)。__slots__
是一项新功能,可以阻止在对象中添加dict()并仅为__slots__
中的属性分配内存@property
,property()
...)仅适用于新的类样式。关于MRO,请查看文档The Python 2.3 Method Resolution Order。在2.2之前,实施是:
首先是深度,然后是从左到右
虽然新的是C3,但更复杂但处理前一个没有正确处理的各种情况(检查Samuele Pedroni post on the python mailing list)。