python 3 中所有类均为新式类,自动继承 object,显式写 (object) 冗余且无运行时影响;object 统一类型系统,支撑 super()、__mro__、isinstance 等机制,并提供默认方法实现。

因为 object 是 Python 类型系统的根,所有类必须有统一的起点,才能保证内置方法、继承逻辑、isinstance 判断和 MRO 机制一致运行。
Python 3 中不写 (object) 也能用 super() 和 __mro__
这是新式类(new-style class)的默认行为。Python 3 彻底移除了老式类(classic class),所有类——无论是否显式写 (object)——都自动获得:
-
super()可正常调用,不会抛TypeError: super() argument 1 must be type, not classobj -
MyClass.__mro__存在且返回元组,比如(<class>, <class>)</class></class> - 多重继承时使用 C3 线性化算法计算方法解析顺序,不是深度优先
显式写 class A(object): 在 Python 3 中不是错误,但有代价
它语义上冗余,且可能掩盖真实意图:
快速生成专业的 Python 脚本和应用代码。一键创建完整项目结构,支持CLI、API、爬虫、Bot、Django等多种项目类型,包含完整的项目结构、配置文件、依赖管理、测试、README和文档。
- 不改变任何运行时行为:生成的类对象与
class A:完全相同 - 增加视觉噪音,尤其在大型代码库中反复出现时
- 若团队误以为“写了
object才算新式类”,可能忽略真正影响兼容性的点(如__slots__用法或描述符协议)
真正需要关注 object 的地方是类型检查和鸭子类型边界
你很少直接操作 object,但它在底层决定很多行为是否成立:
-
isinstance(x, object)对所有对象都返回True,包括int、None、自定义实例 - 重写
__eq__或__hash__时,若没调用super().__eq__(other),可能破坏与object默认实现的一致性 -
__init__方法未定义时,实际调用的是object.__init__(它什么也不做),所以不会报错——但这也意味着你无法依赖父类初始化逻辑
容易被忽略的是:object 提供的默认方法(如 __str__)返回的是类似 <__main__.a object at></__main__.a> 的字符串,一旦你忘了重写,日志或调试输出就只剩地址——这不是继承机制的问题,而是对 object 行为预期不足造成的。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










