Python 3 类默认继承 object 是为统一类型系统、消除旧式类语义断裂,使所有类天然支持描述符、super()、可靠MRO及完整__dict__和__class__行为。

Python 3 中的类默认继承 object,不是设计妥协,而是为了统一类型系统、消除旧式类(classic class)带来的语义断裂。它让所有类天然具备描述符支持、super() 正确行为、可靠的 MRO(方法解析顺序)、以及完整的 __dict__ 和 __class__ 行为——这些在 Python 2 的旧式类里要么缺失,要么表现不一致。
Python 2 的旧式类到底缺了什么
在 Python 2 中,class A: 创建的是旧式类,它不继承 object,直接导致:
-
super(A, self)报TypeError,无法安全使用 -
A.__mro__属性不存在,isinstance()和多重继承逻辑不可靠 - 没有
__class__属性,type(obj) is A和obj.__class__ is A行为不等价 - @property、
__slots__、描述符协议(如__get__)部分失效或静默忽略
Python 3 默认继承 object 后,你不用写也能获得什么
只要定义 class Person:,你就自动拥有:
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
-
Person.__bases__返回(<class>,)</class> -
Person.__mro__是一个合法元组,包含Person→object - 所有实例都有
__dict__(除非显式用__slots__约束)和__class__ - 能正常使用
super()、@property、__init_subclass__等现代特性
显式写 class A(object): 在 Python 3 中还有必要吗
功能上完全没必要,但保留有实际好处:
立即学习“Python免费学习笔记(深入)”;
- 代码在 Python 2.7 下仍可运行(虽然已淘汰,但某些遗留环境还在)
- 明确表达“这是一个完整的新式类”,对团队协作或框架开发更易读
- 避免被误读为“忘了写父类”——尤其当类本该继承其他基类却漏写了时,
class A(object):至少表明作者有意为之 - 部分静态分析工具或类型检查器(如 mypy)在处理空继承时可能给出模糊提示,显式写上更稳妥
真正容易被忽略的是:哪怕你写了 class A(B, C):,只要 B 和 C 都没显式继承 object(且它们本身也不是内置类型),而你又在 Python 2 下运行,就可能触发 MRO 错乱——Python 3 消除了这个隐患,但隐患的根源不在语法糖,而在类型系统的底层一致性。

















