Python编程实战 - 面向对象与进阶语法 - 继承与多态

简介: 继承与多态是Python面向对象编程的核心,实现代码复用、扩展与灵活调用。子类可继承父类属性方法,并通过重写或super()实现多态,配合“鸭子类型”提升程序通用性与可维护性。


在学习完类与对象的基本概念之后,我们就能更深入地理解 Python 面向对象编程(OOP)的强大之处。而其中的“继承”与“多态”,正是让代码更加简洁、灵活、可扩展的核心机制。


一、继承(Inheritance)是什么

继承可以理解为“子类继承父类的特性与行为”,即子类可以使用父类的属性和方法,同时还能在此基础上扩展或重写。

例如,我们定义一个 Animal 类作为父类:

class Animal:
    def __init__(self, name):
        self.name = name
    def speak(self):
        print("动物在发出声音")

再定义一个 Dog 类继承 Animal

class Dog(Animal):
    def speak(self):
        print(f"{self.name}:汪汪!")

使用时:

dog = Dog("旺财")
dog.speak()

输出结果:

旺财:汪汪!

✅ 可以看到,Dog 类继承了 Animal 的属性 name,但重写了 speak() 方法,表现出不同的行为。


二、继承的优势

  1. 1. 代码复用:不用重复编写相同逻辑。
  2. 2. 结构清晰:通过层次关系组织代码,易于维护。
  3. 3. 便于扩展:新增子类即可扩展新功能,而不必修改已有代码(符合“开闭原则”)。

三、调用父类方法

有时候子类希望在保留父类功能的同时增加新的逻辑,可以用 super() 调用父类方法。

class Cat(Animal):
    def speak(self):
        super().speak()  # 调用父类方法
        print(f"{self.name}:喵喵!")

执行:

cat = Cat("花花")
cat.speak()

输出:

动物在发出声音
花花:喵喵!

四、多态(Polymorphism)是什么

多态意味着“同样的方法调用,可以表现出不同的行为”。

例如,定义多个子类,每个类实现自己的 speak() 方法:

animals = [Dog("小黑"), Cat("小花"), Animal("未知")]
for a in animals:
    a.speak()

输出:

小黑:汪汪!
小花:喵喵!
动物在发出声音

即使我们调用的是同一个方法 speak(),但不同对象展示了不同的结果——这就是多态。


五、Python的动态多态特性

Python 是动态类型语言,不需要像 Java 那样显式声明接口,只要对象实现了所需的方法,就可以被同样地调用。这种特性被称为 “鸭子类型(Duck Typing)”

“如果它看起来像鸭子,叫起来像鸭子,那它就是鸭子。”

class Duck:
    def speak(self):
        print("嘎嘎!")
class Person:
    def speak(self):
        print("你好,我能模仿鸭子!")
def make_it_speak(obj):
    obj.speak()
make_it_speak(Duck())
make_it_speak(Person())

输出:

嘎嘎!
你好,我能模仿鸭子!

六、总结

概念 说明
继承 子类复用父类属性和方法
重写 子类覆盖父类方法以实现新功能
多态 不同对象对同一方法调用表现不同
super() 调用父类方法
鸭子类型 只要行为相同,不必强制类型继承

继承与多态让代码更具层次与灵活性,是构建大型 Python 程序的重要思想。


 

相关文章
|
24天前
|
机器学习/深度学习 弹性计算 网络协议
阿里云服务器ECS c9i实例收费价格:2核4G、4核8G和8核16G优惠配置整理
阿里云ECS计算型c9i实例,2核4G、4核8G、8核16G享优惠价,搭载Intel Xeon处理器,主频3.2GHz,适用于Web服务、机器学习等场景,ESSD云盘,网络性能强劲,限时活动价格低至181.73元/月。
215 95
|
5天前
|
人工智能 编解码 数据可视化
构建AI智能体:三十、精雕细琢:驾驭关键词的细微差别,解锁高质量提示词编排与视觉表征
《AI图像生成中的提示词工程艺术》摘要:文章系统阐述了人工智能图像生成中的提示词工程(Prompt Engineering)技术。通过具体案例对比,展示了细微的提示词差异如何导致图像质量的巨大分野,详细解析了提示词的核心要素、语法结构及编排方法。文章提出专业级提示词的多维描述矩阵和权重控制语法,强调精准描述与AI沟通的重要性。同时指出,提示词工程是艺术与科学的结合,需要不断练习和实验才能掌握这项数字时代的关键创造力技能。
90 11
|
9天前
|
人工智能 安全 程序员
AI会写代码,但谁来定义问题?
在AI编码时代,技术债务问题被急剧放大。AI既能放大编码能力,也会放大错误和模糊需求带来的问题。本文探讨了需求分析在AI时代的关键作用,提出了有效路径,强调需求分析师将成为AI时代最重要的角色,并确保软件系统真正解决业务问题。
163 98
|
2天前
|
消息中间件 缓存 前端开发
WebSocket 与 MQTT 在即时通讯中的深度对比与架构选型指南
WebSocket 是双向通信通道,适合前端实时交互;MQTT 是轻量级消息协议,支持发布/订阅与可靠传输。二者互补,常结合使用:前端通过 WebSocket 接入,后端以 MQTT 实现高并发消息分发,构建可扩展的现代即时通讯系统。
107 17
|
1天前
|
自然语言处理 JavaScript 前端开发
全面解析 i18n:从概念到实践,再到底层原理
本文系统讲解国际化(i18n)的核心概念与实现原理,涵盖多语言文本、日期、数字、复数等处理方式,结合 i18next 与 Vue I18n 实战案例,深入剖析资源分离、环境识别与动态替换三大机制,并分享插值、格式化、CI/CD 集成等最佳实践,助力构建可扩展的全球化应用。
63 14
|
2天前
|
人工智能 Unix Shell
构建AI智能体:三十三、LangChain LCEL深度解析:基于Runnable协议的声明式编程新范式
本文介绍了LangChain表达式语言(LCEL)的核心概念及其优势。LCEL通过Runnable协议和管道操作符(|)提供了一种声明式、模块化的方式来构建AI应用工作流。相比传统SequentialChain,LCEL具有更简洁的语法、更强的组合性和统一调用接口,支持流式传输、批量处理等高级功能。文章通过对比示例展示了LCEL如何简化Prompt模板、LLM模型和输出解析器的组合过程,并演示了复杂链的构建方法。LCEL使开发者能够像搭积木一样灵活组合各种组件,同时自动获得生产级应用所需的功能特性
72 13
|
1天前
|
弹性计算 应用服务中间件 异构计算
阿里云服务器官网链接,多款云服务器入口大全,一篇文章搞定!
阿里云服务器官方入口大全,涵盖ECS、轻量应用服务器、GPU服务器等各类产品链接,提供官方页面及管理控制台直达地址,方便用户快速登录与管理云资源。
|
1天前
|
人工智能 前端开发 安全
AI 最先替代的开发工作:从重复劳动到人机协同的新范式
AI正加速替代基础开发工作:CRUD页面、样板代码、简单Bug修复、文档生成与基础测试等重复性任务已可通过低代码平台与AI工具高效完成,显著提升生产力。据Gartner报告,70%企业内部系统已采用AI辅助开发,人力投入减少60%-80%。GitHub Copilot等工具更让开发者节省45%编码时间。然而,产品需求分析、系统架构设计、复杂交互体验及创新研发等需深度判断与创造力的工作,仍依赖人类智慧。未来开发者将转型为“AI指挥官”,聚焦问题定义、提示工程与人机协同,核心竞争力转向系统思维、业务理解与技术创新。
76 15
|
24天前
|
Ubuntu Linux 开发工具
Linux操作技巧: 修改网卡名称方法详述
以上就是在Linux系统中修改网卡名称的详细步骤。希望这些信息能帮助到有此需求的用户。
144 12
|
9天前
|
JSON 安全 JavaScript
深入浅出解析 HTTPS 原理
HTTPS是HTTP与SSL/TLS结合的安全协议,通过数字证书验证身份,利用非对称加密安全交换会话密钥,再以对称加密高效传输数据,确保通信的机密性、完整性和真实性。整个过程如同建立一条加密隧道,保障网络交互安全。
423 16