为什么在Python中定义类时不写继承object也能正常工作?

云萱大大_7385

云萱大大_7385

2026-09-16

425人浏览

原创

python 3 中 class a: 与 class a(object): 完全等价,因所有类默认隐式继承 object;可正常使用 super()、__mro__、__slots__ 等功能,但 object.__init__() 不接受参数,误传会导致 typeerror。

为什么在python中定义类时不写继承object也能正常工作?

Python 3 中不写 object 也能正常工作,是因为所有类默认隐式继承 object——这不是“凑巧能用”,而是语言设计的强制约定。

Python 3 所有类自动是新式类

从 Python 3 开始,class A:class A(object): 在运行时完全等价。解释器会在类创建时自动把 object 插入到 __mro__ 的末尾:

class A:
    pass
print(A.__mro__)
# 输出: (<class>, <class>)</class></class>

这意味着你随时能用 super()、访问 __mro__、使用 __slots__、正确参与 isinstance() 判断——这些功能不再依赖你是否手写 (object)

常见错误现象:

  • 在 Python 2 环境下跑 class A:super(A, self)TypeError: super() argument 1 must be type, not classobj
  • 误以为 “没写 object 就不是新式类”,结果在 Python 3 里白加了一层冗余声明

显式写 (object) 唯一有用的场景

它不改变行为,只服务于外部约束或信号传递:

python全能编程助手
python全能编程助手

SkillSub Pro - Python 题解与代码注释双功能技能功能概述SkillSub Pro - Python 题解与代码注释双功能技能是一项面向实际任务的技能,主要用于SkillSub Pro 是一个 Python 题解生成与代码注释的 双功能合体技能 ,专为学生、算法学习者和开发者设计;✅ 一个技能,两种用途 :;核心要点📝 题解模式 :输入题目/题号,自动生成完整 Python 题解(含详细注释、解题思路、复杂度分析);💬 注释模式 :输入 Python 代码,自动添加详细中。它将相关步骤、

下载
  • 代码需同时支持 Python 2.7:此时 class A(object): 是唯一能获得新式类语义的写法
  • 团队静态检查(如 mypy)对空继承提示模糊,加 (object) 可绕过 missing-base-class 警告
  • 避免被误读为“漏写父类”:比如本该继承 Exception 却只写了 class MyError:,加 (object) 至少表明“我确认这是顶层类”

注意:object 不提供可被覆盖的初始化逻辑——object.__init__() 不接受任何参数。所以如果你写了 super().__init__(x),不管有没有显式继承 object,都会触发 TypeError: object() takes no parameters

容易踩的坑:以为写了 (object) 就能控制初始化流程

很多人看到 class A(object): 就下意识在 __init__ 里调用 super().__init__(...),但这是错的:

  • object.__init__() 签名是 def __init__(self),**不允许任何额外参数**
  • 如果类只继承 object(即无其他父类),super().__init__() 可以省略,或必须不带参数调用
  • 真正要传参的,是你的自定义父类或内置类型(如 listdict),不是 object

验证方法很简单:print(YourClass.__mro__),看 object 是不是最后一个;如果不是,前面那个类才决定 super().__init__() 该传什么。

最常被忽略的一点:你几乎不需要直接和 object 打交道,但它提供的默认方法(比如 __str__)返回的是 <__main__.a object at></__main__.a> 这种地址字符串。一旦忘了重写,日志里就只剩内存地址——这不是继承机制的问题,而是对 object 行为预期不足。

Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1551

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

3644

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1569

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

20857

23

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

2587

5

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

2647

5

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1063

5

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

576

4

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2043

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程