0

0

Python继承怎么实现_单继承与多继承及super函数高阶用法

P粉602998670

P粉602998670

发布时间:2026-03-18 07:23:09

|

858人浏览过

|

来源于php中文网

原创

不调用父类__init__会丢失属性赋值、资源申请、验证等初始化逻辑,导致运行时AttributeError或逻辑错误;必须显式调用super().__init__()且参数对齐,多继承中super()按MRO顺序调用而非简单左到右。

python继承怎么实现_单继承与多继承及super函数高阶用法

Python单继承里,__init__不调用父类会丢掉什么

父类的初始化逻辑直接跳过,比如属性没赋值、资源没申请、验证没执行——不是报错,而是运行时突然 AttributeError 或逻辑错乱。

常见错误现象:AttributeError: 'Child' object has no attribute 'name',但父类明明在 __init__ 里写了 self.name = name

  • 子类 __init__ 中必须显式调用 super().__init__(...),不能靠“自动继承”
  • 参数要对齐:父类要 2 个参数,你就得传 2 个,别漏掉 **kwargs(尤其在框架代码里)
  • 如果父类 __init__ 有副作用(如打开文件、注册回调),跳过它会导致后续方法完全不可用

多继承下 super() 调用顺序不是“从左到右”,而是 MRO

super() 不是简单找左边第一个父类,它按方法解析顺序(MRO)走,这个顺序可以通过 ClassName.__mro__ 查看。写死 ParentA.__init__() 看似稳妥,实则破坏协作性,尤其在 mixin 类中会出问题。

使用场景:你写了个 LoggingMixinValidatingMixin,都重写了 save(),又想让它们和 Model 一起被调用。

立即学习Python免费学习笔记(深入)”;

  • 永远用 super().method(),而不是硬编码父类名加括号
  • 检查 MRO:打印 Child.__mro__,确认你想调用的类确实在链上且位置合理
  • 如果两个父类都定义了同名方法但没调 super(),右边那个根本不会被执行——这是最常踩的坑

super() 在静态方法、类方法、普通方法里行为不同

它不是“找上一级”,而是根据当前所在函数的类型和调用上下文,动态绑定下一个实现。误用会导致 TypeError: super(): no arguments 或静默跳过。

Beago
Beago

零一万物推出的AI搜索工具

下载

参数差异:

  • 在实例方法里:super() 等价于 super(CurrentClass, self)
  • 在类方法里:super() 等价于 super(CurrentClass, cls),必须确保 cls 是当前类或其子类
  • 在静态方法里:super() 无法推导上下文,必须显式传两个参数,否则报错

性能影响很小,但写错参数类型会让继承链断裂——比如在 @classmethod 里写成 super().some_method()(缺 cls),Python 3.10+ 会直接抛异常。

多重 mixin 组合时,super() 链断掉的典型信号

某个方法看似被调用了,但中间某层的逻辑没执行;或者同一个方法被重复调用两次——说明 MRO 没对齐,或某处用了硬编码调用绕过了 super()

容易忽略的地方:

  • 第三方库的基类(如 Django 的 models.Model)内部大量依赖 super(),你一旦在自定义类里写 Parent.save() 就可能跳过它的钩子
  • 当出现 RecursionError,大概率是两个类互相调 super() 却没终止条件(比如都忘了在最终基类里去掉 super()
  • 调试时别只看类定义顺序,重点查 ClassName.__mro__ 输出,比读代码快得多

复杂点在于:MRO 是 C3 线性化算法算出来的,不是直觉能猜准的;哪怕改一个父类顺序,整个链都可能变。别靠记忆,每次不确定就 print 一下。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python Web 框架 Django 深度开发
Python Web 框架 Django 深度开发

本专题系统讲解 Python Django 框架的核心功能与进阶开发技巧,包括 Django 项目结构、数据库模型与迁移、视图与模板渲染、表单与认证管理、RESTful API 开发、Django 中间件与缓存优化、部署与性能调优。通过实战案例,帮助学习者掌握 使用 Django 快速构建功能全面的 Web 应用与全栈开发能力。

169

2026.02.04

python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

193

2023.09.27

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

19

2026.02.03

java多继承如何实现
java多继承如何实现

本专题整合了java多继承相关内容以及教程,阅读专题下面的文章了解更多详细内容。

34

2025.10.28

页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

507

2023.08.14

抖漫入口地址合集
抖漫入口地址合集

本专题整合了抖漫入口地址相关合集,阅读专题下面的文章了解更多详细地址。

1

2026.03.17

多环境下的 Nginx 安装、结构与运维实战
多环境下的 Nginx 安装、结构与运维实战

本专题聚焦多环境下Nginx实战,详解开发、测试及生产环境的差异化安装策略与目录结构规划。深入剖析配置模块化设计、灰度发布流程及跨环境同步机制。结合监控告警、故障排查与自动化运维工具,提供全链路管理方案,助力团队构建灵活、高可用的Nginx服务体系,从容应对复杂业务场景挑战。

0

2026.03.17

PS 批量添加图片
PS 批量添加图片

本专题整合了PS批量添加图片教程合集,阅读专题下面的文章了解更多详细操作。

0

2026.03.17

Nginx 基础架构:从安装配置到系统化管理
Nginx 基础架构:从安装配置到系统化管理

本专题深入解析Nginx基础架构,涵盖从源码编译与包管理安装,到核心配置文件优化及虚拟主机部署。进一步探讨日志轮转、性能调优、高可用集群构建及自动化运维策略,助力管理员实现从单一服务搭建到企业级系统化管理的全面升级,确保Web服务高效、稳定运行。

1

2026.03.17

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 5.1万人学习

SciPy 教程
SciPy 教程

共10课时 | 2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号