11.Python 面向对象三大特性详解:封装、继承、多态与多继承、魔术方法及抽象类
摘要本文系统讲解了 Python 面向对象的三大特性——封装、继承重点涵盖多继承与 MRO和多态同时介绍了常用的魔术方法、魔术属性以及如何使用 abc 模块定义抽象类帮助开发者深入理解 Python 面向对象编程的核心机制与最佳实践。目录1. 封装数据与行为的捆绑1.1 私有属性和方法2. 继承复用与扩展2.1 单继承2.2 多继承2.3 方法解析顺序MRO3. 多态统一的接口不同的实现4. 魔术属性和魔术方法4.1 常用魔术方法4.2 常用魔术属性5. 抽象类定义接口规范1. 封装数据与行为的捆绑封装是面向对象编程的核心思想之一它将数据属性和操作数据的方法函数绑定在一起形成一个独立的单元——类。在 Python 中封装主要通过命名约定和访问控制来实现。1.1 私有属性和方法Python 没有严格的访问修饰符如 Java 的 private但社区约定以单下划线_name表示受保护的成员建议外部不要直接访问双下划线__name会触发名称改写机制使得外部难以直接访问从而实现更严格的私有化。class BankAccount: def __init__(self, owner, balance0): self.owner owner # 公开属性 self._balance balance # 受保护属性不建议外部直接修改 self.__password 1234 # 私有属性名称被改写为 _BankAccount__password def deposit(self, amount): if amount gt; 0: self._balance amount return self._balance def get_balance(self): return self._balance account BankAccount(Alice, 1000) print(account.get_balance()) # 1000 print(account.__password) # AttributeError print(account._BankAccount__password) # 仍可访问但不推荐封装的好处在于隐藏实现细节只暴露必要的接口提高代码的安全性和可维护性。2. 继承复用与扩展继承允许我们基于已有的类父类/基类创建新的类子类/派生类子类自动获得父类的属性和方法并可以添加或覆盖自己的行为。2.1 单继承class Animal: def __init__(self, name): self.name name def speak(self): return f{self.name} makes a sound. class Dog(Animal): def speak(self): # 方法重写 return f{self.name} barks. dog Dog(Buddy) print(dog.speak()) # Buddy barks.2.2 多继承Python 支持多继承即一个类可以同时继承多个父类。这使得代码复用更加灵活但也带来了方法解析顺序的复杂性。class Flyable: def fly(self): return I can fly! class Swimmable: def swim(self): return I can swim! class Duck(Animal, Flyable, Swimmable): def speak(self): return f{self.name} quacks. duck Duck(Donald) print(duck.speak()) # Donald quacks. (来自 Animal重写后) print(duck.fly()) # I can fly! (来自 Flyable) print(duck.swim()) # I can swim! (来自 Swimmable)2.3 方法解析顺序MRO当多个父类中存在同名方法时Python 使用 C3 线性化算法确定方法的搜索顺序。可以通过__mro__属性或mro()方法查看继承链。class A: def method(self): return A class B(A): def method(self): return B class C(A): def method(self): return C class D(B, C): pass print(D().method()) # B因为 MRO 为 D - B - C - A print(D.mro)多继承极大地增强了代码组合能力常与 Mixin 模式结合使用。Mixin 是一种只提供特定功能的类通常不单独实例化。class LoggerMixin: def log(self, message): print(f[LOG] {message}) class DataProcessor(LoggerMixin): def process(self, data): self.log(Processing data...) # 处理逻辑 return data processor DataProcessor() processor.process(sample)3. 多态统一的接口不同的实现多态指同一个接口可以根据对象类型的不同而表现出不同的行为。在 Python 中多态主要依赖鸭子类型只要对象实现了所需的方法就可以作为参数传递而不强制要求继承自特定基类。class Cat(Animal): def speak(self): return f{self.name} meows. class Bird(Animal): def speak(self): return f{self.name} chirps. def animal_sound(animal): print(animal.speak()) animal_sound(Dog(Rex)) # Rex barks. animal_sound(Cat(Whiskers)) # Whiskers meows. animal_sound(Bird(Tweety)) # Tweety chirps.多态让代码更加灵活、可扩展符合开闭原则。4. 魔术属性和魔术方法魔术方法Magic Methods是 Python 中以双下划线开头和结尾的特殊方法它们会在特定操作发生时被自动调用。魔术属性则是 Python 内置的特殊属性用于访问类的元信息。4.1 常用魔术方法__init__构造方法对象初始化时调用。__str__定义对象被str()或print()时的字符串表示。__repr__定义对象的官方字符串表示通常用于调试。__len__支持len()函数。__getitem__/__setitem__使对象支持下标访问。__call__使实例像函数一样可调用。__add__、__mul__等运算符重载。class Vector: def __init__(self, x, y): self.x x self.y y def __repr__(self): return fVector({self.x}, {self.y}) def add(self, other): return Vector(self.x other.x, self.y other.y) def len(self): return 2 v1 Vector(1, 2) v2 Vector(3, 4) print(v1 v2) # Vector(4, 6) print(len(v1)) # 24.2 常用魔术属性__dict__返回对象的属性字典。__class__返回对象所属的类。__doc__返回类的文档字符串。__name__返回类名字符串。__module__返回类定义所在的模块名。class Person: 人类模型 def __init__(self, name, age): self.name name self.age age p Person(Alice, 30) print(p.dict) # {name: Alice, age: 30} print(p.class) # class main.Person print(Person.doc) # 人类模型 print(Person.name) # Person5. 抽象类定义接口规范抽象类是一种不能直接实例化的类它定义了一组必须由子类实现的抽象方法。Python 通过abc模块提供抽象基类的支持。抽象类常与多态结合强制子类实现特定接口。from abc import ABC, abstractmethod class Shape(ABC): abstractmethod def area(self): pass abstractmethod def perimeter(self): pass class Circle(Shape): def init(self, radius): self.radius radius def area(self): return 3.14159 * self.radius ** 2 def perimeter(self): return 2 * 3.14159 * self.radius class Rectangle(Shape): def init(self, width, height): self.width width self.height height def area(self): return self.width * self.height def perimeter(self): return 2 * (self.width self.height) shapes [Circle(5), Rectangle(4, 6)] for s in shapes: print(f{s.class.name} area: {s.area()}) Circle area: 78.53975 Rectangle area: 24抽象类确保了所有子类都遵循统一的接口约定提高了代码的健壮性和可读性。如果子类未实现所有抽象方法Python 会在实例化时抛出TypeError。

相关新闻

浏览器自动化Agent实战:GUI操作与网页抓取完整解决方案

浏览器自动化Agent实战:GUI操作与网页抓取完整解决方案

浏览器自动化Agent实战:GUI操作与网页抓取完整解决方案 【免费下载链接】ai-agent-book 《深入理解 AI Agent:设计原理与工程实践》(李博杰 著)开源主仓库:全书正文、编译版 PDF 与按章配套代码 项目地址: https://g…

2026/8/5 5:04:24 阅读更多 →
自托管 Umami 实现 iOS 应用分析:免重量级 SDK,数据统计更精准!

自托管 Umami 实现 iOS 应用分析:免重量级 SDK,数据统计更精准!

鲁纳奥维森耶尔巴克相关信息涉及领导力、产品与技术,包含项目、文章、演讲、关于等方面。使用自托管的 Umami 进行 iOS 应用分析2026 年 7 月 14 日发布,阅读时长 7 分钟,标签有分析、iOS、应用、开源、Fly、Cloudflare。因已自托管 Umami&am…

2026/8/6 21:03:37 阅读更多 →
frab 会议系统用户手册:从议程安排到参会者管理全攻略

frab 会议系统用户手册:从议程安排到参会者管理全攻略

frab 会议系统用户手册:从议程安排到参会者管理全攻略 【免费下载链接】frab conference management system 项目地址: https://gitcode.com/gh_mirrors/fr/frab frab 是一款强大的会议管理系统,专为社区会议打造,支持从会议创建、演讲…

2026/8/5 4:27:48 阅读更多 →

最新新闻

MiniMax H3 MoE大模型开源:SD级性能本地部署与实战指南

MiniMax H3 MoE大模型开源:SD级性能本地部署与实战指南

最近在AI大模型领域,一个重磅消息引发了开发者和研究者的广泛关注:MiniMax公司正式宣布其新一代MoE(混合专家)大语言模型H3开源,并且其性能表现达到了与SD(Stable Diffusion)级模型相媲美的质量…

2026/8/6 23:48:14 阅读更多 →
H3开源大模型实战指南:SD级质量、MoE架构与本地部署全解析

H3开源大模型实战指南:SD级质量、MoE架构与本地部署全解析

如果你最近关注AI开源社区,可能会注意到一个有趣的现象:MiniMax这家公司,因其闭源的“ABAB”系列大模型而闻名,最近却高调地祝贺了一个名为“H3”的模型开源,并称其达到了“SD级质量”。这立刻引出了几个关键问题&…

2026/8/6 23:48:14 阅读更多 →
揭秘无锡专业网站建设背后的真相:为什么你的企业需要定制化而非模板?

揭秘无锡专业网站建设背后的真相:为什么你的企业需要定制化而非模板?

在这个数字化浪潮席卷全球的今天,很多无锡的企业主,尤其是那些在传统制造业、贸易行业深耕多年的朋友,经常会问我最一个看似简单却极其棘手的问题:“我就想做个网站,随便找个网上的模板套一下,花个几百上千块钱,不就能上线了吗?干嘛非要找专业的公司,还得花个几万块去…

2026/8/6 23:48:14 阅读更多 →
医药行业EDI对接实战:CVS Health的X12与AS2实现

医药行业EDI对接实战:CVS Health的X12与AS2实现

1. 医药行业EDI对接的背景与挑战医药行业的电子数据交换(EDI)与其他行业有着显著不同。在这个人命关天的领域,每一次数据传输都直接关系到患者的用药安全和供应链的可靠性。我曾参与过多次医药行业EDI对接,H公司与CVS Health的这次…

2026/8/6 23:48:14 阅读更多 →
终极指南:原生Playwright vs AI驱动的playwright-skill,哪个更适合你的自动化测试需求?

终极指南:原生Playwright vs AI驱动的playwright-skill,哪个更适合你的自动化测试需求?

终极指南:原生Playwright vs AI驱动的playwright-skill,哪个更适合你的自动化测试需求? 【免费下载链接】playwright-skill Claude Code Skill for browser automation with Playwright. Model-invoked - Claude autonomously writes and exe…

2026/8/6 23:48:14 阅读更多 →
别再盲目硬啃英文研报!我用全流程自动化工具,1分钟盘下一份50页海外深度报告

别再盲目硬啃英文研报!我用全流程自动化工具,1分钟盘下一份50页海外深度报告

摘要:咨询、投研、市场人员经常需要阅读几十页的英文行业报告。面对“下午3点前给我摘要”的限时审判,传统“硬着头皮查词典”的死磕模式,不仅耗尽精力,更导致产出质量坍塌。本文以一份真实的50页英文行业报告为例,完整…

2026/8/6 23:47:13 阅读更多 →

日新闻

深入解析LimboAI C++内核:架构设计与性能优化实战

深入解析LimboAI C++内核:架构设计与性能优化实战

1. 项目概述:为什么我们需要深入LimboAI的C内核?如果你是一名使用Godot引擎的游戏开发者,尤其是对AI行为逻辑有较高要求的项目,那么LimboAI这个名字你大概率不会陌生。它作为Godot 4生态中一个备受瞩目的行为树与状态机插件&#…

2026/8/6 0:00:06 阅读更多 →
Unity 2D游戏敌人AI系统:基于PlayMaker状态机与2D Toolkit的实战开发

Unity 2D游戏敌人AI系统:基于PlayMaker状态机与2D Toolkit的实战开发

1. 项目概述与核心思路大家好,我是老张,一个在游戏开发一线摸爬滚打了十多年的老码农。今天咱们接着聊《空洞骑士》风格2D动作游戏的Demo制作。上一期我们搭好了基础框架,处理了角色移动和碰撞,这一期,我们要让游戏世界…

2026/8/6 0:00:06 阅读更多 →
被动防火门市场前景发展趋势

被动防火门市场前景发展趋势

被动防火门依靠材质结构、密闭构造阻隔烟火蔓延,无需电控启动,是建筑被动消防系统核心构件,行业依托新规管控、城市更新、工业安全升级迎来稳定扩容,整体朝着合规化、专项化、低碳化、智能化方向发展。现阶段 GB12955‑2024 新版国…

2026/8/6 0:00:06 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/6 22:02:27 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/6 22:02:27 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/6 22:02:27 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/5 23:28:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/6 22:02:28 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/5 23:46:51 阅读更多 →