Python高级编程——15.新式类和经典类的区别

本文探讨了Python中新式类与经典类的主要区别,包括__class__属性的使用、继承搜索顺序的变化、__slots__内置属性的作用及其实现原理、以及新增的__getattribute__方法等。同时,还介绍了Python2.x与Python3.x中关于新式类的不同实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.新式类对象可以直接通过__class__属性获取自身类型:type


2. 继承搜索的顺序发生了改变,经典类多继承属性搜索顺序: 先深入继承树左侧,再返回,开始找右侧;新式类多继承属性搜索顺序: 先水平搜索,然后再向上移动

3. 新式类增加了__slots__内置属性, 可以把实例属性的种类锁定到__slots__规定的范围之中。

通常每一个实例都会有一个__dict__属性,用来记录实例中所有的属性和方法,也是通过这个字典,可以让实例绑定任意的属性

而__slots__属性作用就是,当类C有比较少的变量,而且拥有__slots__属性时,

类C的实例 就没有__dict__属性,而是把变量的值存在一个固定的地方。如果试图访问一个__slots__中没有

的属性,实例就会报错。这样操作有什么好处呢?__slots__属性虽然令实例失去了绑定任意属性的便利,

但是因为每一个实例没有__dict__属性,却能有效节省每一个实例的内存消耗,有利于生成小而精

干的实例。


4. 新式类增加了__getattribute__方法



Python 2.x中默认都是经典类,只有显式继承了object才是新式类

Python 3.x中默认都是新式类,不必显式的继承object



内容概要:《中文大模型基准测评2025年上半年报告》由SuperCLUE团队发布,详细评估了2025年上半年中文大模型的发展状况。报告涵盖了大模型的关键进展、国内外大模型全景图及差距、专项测评基准介绍等。通过SuperCLUE基准,对45个国内外代表性大模型进行了六大任务(数学推理、科学推理、代码生成、智能体Agent、精确指令遵循、幻觉控制)的综合测评。结果显示,海外模型如o3、o4-mini(high)在推理任务上表现突出,而国内模型如Doubao-Seed-1.6-thinking-250715在智能体Agent幻觉控制任务上表现出色。此外,报告还分析了模型性价比、效能区间分布,并对代表性模型如Doubao-Seed-1.6-thinking-250715、DeepSeek-R1-0528、GLM-4.5等进行了详细介绍。整体来看,国内大模型在特定任务上已接近国际顶尖水平,但在综合推理能力上仍有提升空间。 适用人群:对大模型技术感兴趣的科研人员、工程师、产品经理及投资者。 使用场景及目标:①了解2025年上半年中文大模型的发展现状趋势;②评估国内外大模型在不同任务上的表现差异;③为技术选型性能优化提供参考依据。 其他说明:报告提供了详细的测评方法、评分标准及结果分析,确保评估的科学性公正性。此外,SuperCLUE团队还发布了多个专项测评基准,涵盖多模态、文本、推理等多个领域,为业界提供全面的测评服务。
### Python 新式经典区别 #### 型定义差异 在 Python 2 中,如果一个未显式继承 `object`,它会被视为经典;反之,则为新式。而在 Python 3 中,所有默认继承自 `object`,因此不存在经典的概念[^1]。 #### 方法解析顺序 (MRO) 新式采用 C3 线性化算法来决定方法解析顺序 (Method Resolution Order),这种方法确保每个父只被访问一次,并维持正确的继承层次结构。相比之下,经典使用深度优先搜索的方式解析方法,可能导致复杂多重继承场景下的不可预期行为[^5]。 #### 构造函数机制 对于新式而言,存在两个重要的特殊方法:`__new__` `__init__`。其中 `__new__` 是用于创建实例的静态方法,而 `__init__` 负责初始化已创建的对象。这一区分赋予了开发者更大的灵活性。然而,在经典中仅提供 `__init__` 方法而不支持 `__new__`[^5]。 #### 内置属性方法增强 新式引入了一些有用的内置特性,例如可以通过设置 `__slots__` 来限制对象能够动态添加哪些属性,以及利用 `super()` 函数简化对父方法的调用过程。这些功能在经典里要么缺失要么不够完善[^5]。 #### 使用场景分析 由于上述优势所在,在现代编程实践中几乎总是建议选用新式而非经典。特别是在涉及多重继承、需要精确控制对象生命周期或者希望充分利用 Python 提供的各种高级 OOP 特性的场合下更是如此。需要注意的是,随着 Python 3 成为主流版本号之后,讨论经典的实际意义已经大大降低,因为后者完全被淘汰掉了[^4]。 ```python class NewStyleClass(object): """A new-style class example.""" def __init__(self, value): self.value = value def show_value(self): print(f"The value is {self.value}") # In Python 3+, all classes are implicitly new-style. class ImplicitNewStyleClass: pass ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值