Python 继承深度解析 —— 从 __base__ 到 super() 的完整实践
前言继承是面向对象编程OOP的三大特性之一它允许子类复用父类的属性和方法从而实现代码的复用与扩展。在 Python 中一切类默认都是object的子类。本文将结合一段完整的代码示例深入剖析 Python 继承的核心概念包括__base__/__bases__的用法、super()调用父类方法、以及__str__与__repr__在继承中的重写实践。一、继承的基本概念在 Python 中继承的语法非常简洁class 父类: pass class 子类(父类): pass父类基类、超类被继承的类子类继承父类的类我们可以通过两个特殊属性来查看类的父类信息属性说明类名.__base__获取单个父类类名.__bases__获取父类元组class Person(object): pass print(Person.__base__) # class object print(Person.__bases__) # (class object,)二、从简单继承开始我们先定义一个Person类包含姓名和年龄属性以及get_info方法class Person(object): def __init__(self, name, age): self.name name self.age age def get_info(self): return fname:{self.name}, age:{self.age}Person类默认继承自object拥有所有对象的基本行为。三、子类继承与super()调用父类现在定义一个SuperPerson子类在父类的基础上增加skill属性class SuperPerson(Person): def __init__(self, name, age, skill): super().__init__(name, age) # 调用父类的 __init__ self.skill skill def get_info(self): return f{super().get_info()}, skill:{self.skill}这里的关键是super()super()返回一个代理对象用于调用父类的方法super().__init__(name, age)调用了父类Person的构造函数完成name和age的初始化super().get_info()调用了父类的get_info方法在此基础上追加子类的skill信息为什么要用super()在单继承中直接使用父类名调用如Person.__init__(self, name, age)也可以工作。但在多重继承中super()会遵循MRO方法解析顺序规则避免重复调用和钻石继承问题。因此推荐始终使用super()即使是在单继承场景中。四、重写__str__与__repr____str__和__repr__是 Python 中用于定义对象字符串表示的两个魔术方法方法面向对象调用时机__str__最终用户print()、str()、format()__repr__开发者repr()、控制台直接输出、调试重要规则如果没有定义__str__Python 会回退调用__repr__。父类中定义class Person(object): def __str__(self): return Person def __repr__(self): return Person()测试输出p1 Person(马克思, 20) print(p1, [p1]) # Person [Person()]print(p1)调用__str__输出Person列表展示时调用__repr__输出Person()子类中重写并复用父类class SuperPerson(Person): def __str__(self): return fSuper{super().__str__()} def __repr__(self): return fSuper{super().__repr__()}这里通过super()调用了父类的__str__和__repr__并在其基础上添加了Super前缀sp1 SuperPerson(绿巨人, 30, 变身) print(sp1, [sp1]) # SuperPerson [SuperPerson()]这样做的好处是复用父类逻辑避免重复编码保持一致性子类的字符串表示在父类基础上扩展易于维护父类逻辑变更时子类自动同步五、完整代码回顾class Person(object): def __init__(self, name, age): self.name name self.age age def __str__(self): return Person def __repr__(self): return Person() def get_info(self): return fname:{self.name}, age:{self.age} class SuperPerson(Person): def __init__(self, name, age, skill): super().__init__(name, age) self.skill skill def __str__(self): return fSuper{super().__str__()} def __repr__(self): return fSuper{super().__repr__()} def get_info(self): return f{super().get_info()}, skill:{self.skill}六、总结知识点要点__base__/__bases__查看类的父类信息super()调用父类方法支持 MRO推荐优先使用__str__vs__repr____str__面向用户__repr__面向开发者继承中的方法重写使用super()复用父类逻辑保持代码 DRY继承让代码复用变得简单而super()则是让继承变得优雅的关键工具。掌握这些基础你就能在 Python 面向对象编程中游刃有余。

相关新闻

DINOv2终极选择指南:5大场景教你如何快速选择最佳视觉模型

DINOv2终极选择指南:5大场景教你如何快速选择最佳视觉模型

DINOv2终极选择指南:5大场景教你如何快速选择最佳视觉模型 【免费下载链接】dinov2 PyTorch code and models for the DINOv2 self-supervised learning method. 项目地址: https://gitcode.com/GitHub_Trending/di/dinov2 在计算机视觉的世界里,…

2026/10/17 11:03:22 阅读更多 →
OpenClaw智能体安全部署指南:从权限隔离到生产环境加固

OpenClaw智能体安全部署指南:从权限隔离到生产环境加固

1. 从“小龙虾”到智能体:OpenClaw初印象与安全定位最近在AI智能体这个圈子里,OpenClaw(大家戏称“小龙虾”)的热度是肉眼可见地涨起来了。无论是技术社区还是各种尝鲜群,讨论怎么部署、怎么接入飞书微信、怎么玩转它的…

2026/10/17 8:36:33 阅读更多 →
微信聊天记录本地数据库解密与导出:从EnMicroMsg.db到可读HTML的完整方案

微信聊天记录本地数据库解密与导出:从EnMicroMsg.db到可读HTML的完整方案

1. 项目概述:为什么我们需要一个终极备份方案?微信,作为我们日常沟通的绝对主力,承载了太多重要的信息:家人的叮嘱、工作的交接、朋友的约定,乃至那些承载着珍贵回忆的图片和视频。然而,微信官方…

2026/10/17 11:06:21 阅读更多 →

最新新闻

把 Codex auth.json 改到 TaoToken 后的使用笔记:减少重复请求,让调用更可控

把 Codex auth.json 改到 TaoToken 后的使用笔记:减少重复请求,让调用更可控

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 21:43:47 阅读更多 →
Hermes Agent Windows 安装手册:TaoToken 统一 Key 通道下解决系统安全拦截与路径报错

Hermes Agent Windows 安装手册:TaoToken 统一 Key 通道下解决系统安全拦截与路径报错

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 21:43:47 阅读更多 →
Linux服务器全量重建实战:从系统安装到容器化部署与监控

Linux服务器全量重建实战:从系统安装到容器化部署与监控

2026年3月10号这天,我把手头这套Linux服务器从内核到应用层彻底推倒重建了一遍。项目代号就叫“2026.3.10Linux”,说到底这是一个时间节点,也是一次“旧账清零”的机会。这篇文章不打算写成一本正经的安装手册,而是把我当时怎么设…

2026/10/17 21:43:47 阅读更多 →
diagram-design:构建可演进的系统视觉契约

diagram-design:构建可演进的系统视觉契约

1. 项目概述:这不是画图,是构建可演进的系统表达语言“diagram-design”这个词组乍看像一个工具功能按钮,比如某款在线协作软件右上角那个带齿轮图标的“Diagram Design Mode”。但真正做过三年以上系统设计、架构评审或技术文档沉淀的人会立…

2026/10/17 21:43:47 阅读更多 →
自动驾驶轨迹规划:五阶多项式与LatticePlan采样策略详解

自动驾驶轨迹规划:五阶多项式与LatticePlan采样策略详解

1. 五阶轨迹规划到底在解决什么问题1.1 从“能开”到“开得舒服”的分水岭做自动驾驶决策规划这一块的人,迟早会撞上同一个瓶颈:路径规划给出的结果在几何上是通的,但车坐起来就是不舒服。要么方向盘来回小幅修正,要么过弯时横向加…

2026/10/17 21:43:47 阅读更多 →
TAML详解:用熵与Hessian正则消除MAML任务偏置

TAML详解:用熵与Hessian正则消除MAML任务偏置

做元学习实验做久了,你会发现在同一个benchmark里调参跑通的模型,换到另一套任务分布上常常"失灵"。我自己第一次在少样本分类中复现MAML时就遇到过这种事:在Omniglot上跑得稳稳的实现,原封不动搬到miniImageNet上&…

2026/10/17 21:42:46 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →