当前位置: 首页 > news >正文

Python的继承与多态

Python继承的基本概念

继承是面向对象编程的重要特性,允许一个类(子类)继承另一个类(父类)的属性和方法。子类可以复用父类的代码,并扩展或修改父类的行为。

语法示例:

classParentClass:defparent_method(self):print("Parent method")classChildClass(ParentClass):defchild_method(self):print("Child method")

继承的类型

单继承
一个子类只继承一个父类,这是最简单的继承形式。

多继承
Python支持多继承,一个子类可以继承多个父类。多继承的语法是用逗号分隔多个父类。

classFather:deffather_method(self):print("Father method")classMother:defmother_method(self):print("Mother method")classChild(Father,Mother):pass

方法重写

子类可以重写父类的方法,以提供特定的实现。当子类对象调用该方法时,将执行子类中的版本。

classParent:defmethod(self):print("Parent method")classChild(Parent):defmethod(self):print("Child method")

super()函数

super()函数用于调用父类的方法,常用于方法重写时扩展父类行为而非完全替代。

classParent:defmethod(self):print("Parent method")classChild(Parent):defmethod(self):super().method()print("Child method")

Python多态的基本概念

多态指同一操作作用于不同对象时,可以有不同的解释和执行结果。在Python中,多态通过方法重写和鸭子类型实现。

多态特点
不需要强制继承关系(鸭子类型)
只要有同名方法,就能传进去
非常灵活

鸭子类型

Python的多态主要依赖于鸭子类型(Duck Typing),即“如果它走起来像鸭子,叫起来像鸭子,那么它就是鸭子”。不关心对象的类型,只关心对象的行为。

classDog:defspeak(self):return"Woof!"classCat:defspeak(self):return"Meow!"defanimal_sound(animal):print(animal.speak())dog=Dog()cat=Cat()animal_sound(dog)# 输出: Woof!animal_sound(cat)# 输出: Meow!

抽象基类(ABC)

虽然Python支持鸭子类型,但有时需要强制子类实现特定方法。abc模块提供了抽象基类的支持。

fromabcimportABC,abstractmethodclassAnimal(ABC):@abstractmethoddefspeak(self):passclassDog(Animal):defspeak(self):return"Woof!"# 未实现speak方法会报错classCat(Animal):pass

多态与继承的结合

多态常与继承结合使用,子类重写父类方法以实现不同行为。

classAnimal:defspeak(self):raiseNotImplementedError("Subclass must implement abstract method")classDog(Animal):defspeak(self):return"Woof!"classCat(Animal):defspeak(self):return"Meow!"animals=[Dog(),Cat()]foranimalinanimals:print(animal.speak())

方法解析顺序(MRO)

在多继承中,Python使用C3线性化算法确定方法查找顺序,可通过__mro__属性或mro()方法查看。

classA:passclassB(A):passclassC(A):passclassD(B,C):passprint(D.__mro__)

继承中的属性访问

子类可以访问父类的属性和方法,私有属性(以__开头)会被名称修饰(name mangling),无法直接访问。

classParent:def__init__(self):self.public="Public"self.__private="Private"classChild(Parent):defshow(self):print(self.public)# 可访问print(self.__private)# 报错

三大特性总结

封装:把属性 / 方法藏起来
继承:子类复用父类代码
多态:同一方法,不同表现

http://www.jsqmd.com/news/494776/

相关文章:

  • CDial-GPT 开源项目使用教程
  • 嵌入式系统优化
  • 易通成稿www.no1paper.cn在代码中插入此成稿内网
  • 主板调速风扇电路设计
  • Redis 缓存穿透与防御方案实现
  • 2.7通用串行总线 USB Universal Serial Bus
  • 【RK3588开发记录】RK3588之opencv安装(解决libjasper-dev和mipi-csi2接口)
  • 用 RollCode 重构营销 H5 的开发协作逻辑
  • 程序设计-股票最大收益问题(Java)
  • ESXI主机安装Zabbix 6.2
  • 三相并网逆变器外环PI+内环模型预测MPC电流矢量控制仿真(带简要文档)
  • 上班族就医难?天津陪诊认准守嘉,代办陪诊一站式解放时间精力 - 品牌排行榜单
  • Termux Monet 项目使用教程
  • scp拷贝
  • 汽油光谱数据预处理与识别(主成分分析PCA+极限学习机ELM+深度置信网络DBN)附Matlab代码
  • 2023年 beagle bone black教程3-点灯的三种方式
  • 联合循环——33 油罐,水罐,凝汽器和地下管道阴极保护
  • 心电信号去工频和基线漂移(小波/EMD/高通滤波/低通滤波/最小二乘法)附Matlab代码
  • 2023年 beagle bone black教程4-串口的使用
  • NaughtyKeyboard 开源项目教程
  • 异地来津就医不迷茫!天津陪诊选守嘉,全程护航少走弯路 - 品牌排行榜单
  • Chrome Apps for Mobile 项目教程
  • MongoDB(45) 嵌入式文档与引用的优缺点是什么?
  • 解决!expandable-recycler-view 已废弃,替代方案与迁移指南全解析
  • 2023年 beagle bone black教程5-CAN的使用
  • iOS App技术支持网址(URL)
  • 2026年口碑好的小程序开发品牌推荐:辽宁小程序开发/大连小程序开发综合评价公司 - 行业平台推荐
  • Next.js 13/14页面加载优化:NextTopLoader与nprogress深度整合
  • NaughtyKeyboard 使用指南
  • 国内CA服务介绍