gpt4 book ai didi

python - Python 中类 foo 和类 foo(object) 的区别

转载 作者:IT老高 更新时间:2023-10-28 20:34:29 32 4
gpt4 key购买 nike

我知道 class foo(object) 是一种老式的定义类的方法。但我想更详细地了解这两者之间的区别。

最佳答案

在 python 2.2 之前,基本上有两种不同类型的类:由 C 扩展和 C 编码的内置函数(类型)定义的类和由 python 类语句定义的类(类)。当您想要混合 python 类型和内置类型时,这会导致问题。最常见的原因是子类化。如果您想在 Python 代码中对列表类型进行子类化,那么您很不走运,因此使用了各种解决方法,例如将列表的纯 Python 实现子类化(在 UserList 模块中)。

这是一个相当丑陋的,所以在 2.2 中有一个 move统一python和内置类型,包括inherit的能力从他们。结果是“新样式类”。然而,这些确实与旧式类有一些不兼容的差异,因此为了向后兼容,裸类语法创建一个旧式类,而新行为是通过从 object 继承获得的。最明显的行为差异是:

  • 方法解析顺序 (MRO)。菱形继承层次结构中的行为有所不同(其中 A 继承自 B 和 C,它们都继承自公共(public)基类 D。以前,方法是从左到右查找,深度优先(即 A B D C D)但是如果 C 重载了 D 的成员,它将不会被 A 使用(因为它首先找到 D 的实现)这对各种风格的编程都是不利的(例如,使用 mixin 类)。新风格的类将这种情况视为 A B C D, (查看类的 __mro__ 属性以查看它将搜索的顺序)

  • 添加了 __new__ 构造函数,它允许类充当工厂方法,而不是返回类的新实例。对于返回特定子类或重用不可变对象(immutable对象)而不是创建新对象而无需更改创建接口(interface)很有用。

  • Descriptors .这些是属性、类方法、静态方法等背后的特性。本质上,它们提供了一种方法来控制当您访问或设置(新样式)类的特定属性时会发生什么。

关于python - Python 中类 foo 和类 foo(object) 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/332255/

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