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/7/19 19:12:20 阅读更多 →
自托管 Umami 实现 iOS 应用分析:免重量级 SDK,数据统计更精准!

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

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

2026/7/19 19:12:20 阅读更多 →
frab 会议系统用户手册:从议程安排到参会者管理全攻略

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

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

2026/7/19 19:12:20 阅读更多 →

最新新闻

互联网大厂常见Java面试题及答案汇总(2026持续更新)

互联网大厂常见Java面试题及答案汇总(2026持续更新)

金九银十即将来袭,又是一个跳槽的好季节,准备跳槽的同学都摩拳擦掌准备大面好几场,今天为大家准备了互联网面试必备的 1 到 5 年 Java 面试者都需要掌握的面试题,分别 JVM,并发编程,MySQL,Tomca…

2026/7/20 0:15:40 阅读更多 →
ngx_output_chain_get_buf

ngx_output_chain_get_buf

1 定义 ngx_output_chain_get_buf 函数 定义在 src/core/ngx_output_chain.cstatic ngx_int_t ngx_output_chain_get_buf(ngx_output_chain_ctx_t *ctx, off_t bsize) {size_t size;ngx_buf_t *b, *in;ngx_uint_t recycled;in ctx->in->buf;size ctx->buf…

2026/7/20 0:13:39 阅读更多 →
python数据可视化技巧的100个练习 -- 31. 类别数据的点图

python数据可视化技巧的100个练习 -- 31. 类别数据的点图

重要性★★★☆☆ 难度★★☆☆☆ 你是一家零售公司的数据分析师。你的经理要求你可视化最近产品发布的客户满意度评级分布。评级是分类的,范围从“非常不满意”到“非常满意”。创建一个点图以显示每个评级类别的频率。使用 Python 进行数据处理和可视化。在代码中生成输入…

2026/7/20 0:12:39 阅读更多 →
智能体走进物理世界,千里科技携舱驾协同成果亮相WAIC 2026

智能体走进物理世界,千里科技携舱驾协同成果亮相WAIC 2026

在2026世界人工智能大会(WAIC 2026)举办期间,千里科技董事长、阶跃星辰董事长印奇作为特邀嘉宾出席大会开幕式并在大会主论坛(上午场)发表主题演讲《当智能体进入物理世界》。在印奇看来,"智能体"…

2026/7/20 0:12:39 阅读更多 →
商汤大装置发布“技术-生态-商业”闭环布局,共启“国产AI基础设施规模化商用元年”

商汤大装置发布“技术-生态-商业”闭环布局,共启“国产AI基础设施规模化商用元年”

7月18日,在WAIC 2026商汤科技 “基座大模型架构创新与生态合作论坛”上,商汤科技联合创始人、大装置事业群总裁杨帆发表《智变共生——加速AI基础设施持续升级》主题演讲,系统呈现了商汤大装置国产AI基础设施“技术-生态-商业”闭环布局&…

2026/7/20 0:12:39 阅读更多 →
2026年具身智能领域代表性机器人产品观察:普渡一脑多形底座与实景落地解析

2026年具身智能领域代表性机器人产品观察:普渡一脑多形底座与实景落地解析

前言2026年被行业视为具身智能从"实验室炫技"走向"规模化量产"的关键拐点。据弗若斯特沙利文《全球商用服务机器人市场研究报告》,普渡科技以23%市占率位居全球商用服务机器人第一,业务覆盖85+个国家和地区,累…

2026/7/20 0:11:39 阅读更多 →

日新闻

2026 WAIC:努比亚二代“豆包手机”NaviX Ultra亮相,智能体验全面升级!

2026 WAIC:努比亚二代“豆包手机”NaviX Ultra亮相,智能体验全面升级!

7月18日智东西消息,在2026 WAIC期间,努比亚联合字节豆包打造的二代“豆包手机”努比亚NaviX Ultra首次亮相,相比一代有诸多升级。智能体手机理念中兴通讯终端事业部总裁、努比亚总裁倪飞表示,智能体手机要从人操作手机变为手机帮人…

2026/7/20 0:00:34 阅读更多 →
努比亚NaviX Ultra亮相WAIC,智能体手机能否让用户生活更简单?

努比亚NaviX Ultra亮相WAIC,智能体手机能否让用户生活更简单?

努比亚NaviX Ultra:外观与功能双升级在2026 WAIC期间,首次亮相的努比亚NaviX Ultra吸引了众多目光。它是努比亚联合字节豆包打造的二代“豆包手机”,与一代努比亚M153相比,外观设计变化较大。其机身背部搭载横向排布的大尺寸影像模…

2026/7/20 0:00:34 阅读更多 →
C# 将逗号分割的字符串转换为long,并添加到List<long>

C# 将逗号分割的字符串转换为long,并添加到List<long>

目录 方法1:使用Split和Convert.ToInt64 方法2:使用LINQ的Select和ToList 方法3:使用TryParse进行异常安全转换(推荐) 如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天…

2026/7/20 0:00:34 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/19 0:00:40 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/20 4:31:26 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/19 0:00:40 阅读更多 →

月新闻