gpt4 book ai didi

python : method resolution order of old-style (or classic) and new-style objects

转载 作者:太空狗 更新时间:2023-10-30 02:34:24 25 4
gpt4 key购买 nike

我在 Python 文档中阅读了很多关于对象的内容,这些文档在某些时候将这两者区分开来,例如:

  • 旧式实例独立于它们的类,使用称为实例的单一内置类型实现。
  • 新式类不多于也不少于用户定义类型。

谁能给我解释一下这个“旧式(或经典)和新式”。

我不明白这句话想表达什么:

“对于新式类,方法解析顺序动态变化以支持对 super() 的协作调用”。

最佳答案

老类风格:

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__
  • 中的属性分配内存
  • python 属性(@propertyproperty()...)仅适用于新类样式。

关于MRO,查看文档The Python 2.3 Method Resolution Order .在 2.2 之前,实现是:

depth first and then left to right

虽然新的是 C3,但要复杂得多,但可以处理前一个无法正确处理的各种情况(查看 Samuele Pedroni post on the python mailing list)。

关于 python : method resolution order of old-style (or classic) and new-style objects,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8411465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com