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

python中的继承和多态

Python中的继承

  1. 继承中的一些基础的定义
  • 继承是面向对象编程的三大特性之一,它允许一个类(子类)继承另一个类(父类)的属性和方法,从而实现代码的复用(继承的主要目的)和扩展。
  • 父类,也叫超类和基类。
  • 子类,也叫派生类和继承类。
  • 父类构造器:自动调用下一个父类中的构造方法
  1. 继承的基本语法
  • 一个父类可以有多个子类,但一个子类只能有一个父类
  • 没有说明继承哪个类的时候,就会自动继承object类
  • 继承后可以使用父类的公共内容,但不能使用私有内容
class ParentClass:# 父类属性和方法pass
# class 子类名(父类名):
class ChildClass(ParentClass):# 子类属性和方法pass
  1. 方法重写(Override)和父类构造器
  • 继承方法重写定义:在继承关系下改变父类已经定义的方法,从而达到使用的目的。
    子类可以重写父类的方法的示例:
class Bird:def fly(self):return "鸟儿会飞"class Penguin(Bird):def fly(self):return "企鹅不会飞"penguin = Penguin()
print(penguin.fly())  # 输出: 企鹅不会飞
  • 父类构造器:在多继承中的第一个父类中增加super()_ _init _ (下一个父类中的变量),子类中写super() _ init _ _ 就可以了。
  • 如果是单继承的话,直接使用super()_ _ init _ _ 调用。
class Father:def __init__(self):print("Father构造器")super().__init__()class Mother:def __init__(self):print("Mother构造器")super().__init__()class Child(Father, Mother):def __init__(self):print("Child构造器开始")super().__init__()print("Child构造器结束")c = Child()
# 输出:
# Child构造器开始
# Father构造器
# Mother构造器
# Child构造器结束print(Child.__mro__)  # 查看方法解析顺序,Python使用C3算法确定方法调用顺序
  1. 继承的类型
  • 单继承:子类只继承一个父类,如果没有写明具体继承什么类时,定义的类自动继承object类(这就说明,在自己编写类程序的时候,所有的类都是object类的子类)。
class Animal:def __init__(self, name):self.name = namedef speak(self):return "动物叫声"class Dog(Animal):def speak(self):return "汪汪!"dog = Dog("阿黄")
print(dog.name)    # 输出: 阿黄 (继承自Animal)
print(dog.speak()) # 输出: 汪汪! (重写了speak方法)
  • 多继承:子类继承自多个父类,其中父类的优先级是从左到右的(也就是说最左侧的父类就有最高的优先级)。
class Father:def skills(self):return "编程"class Mother:def skills(self):return "绘画"class Child(Father, Mother):def skills(self):# 调用父类方法father_skill = super().skills() # 两个父类中具有相同的方法,优先调用左侧的类中的方法mother_skill = Mother.skills(self)return f"{father_skill}{mother_skill}"child = Child()
print(child.skills())  # 输出: 编程 和 绘画
  1. 继承的注意事项
  • 谨慎使用多继承,可能导致"菱形继承"问题
  • 优先使用组合而非继承,除非确实是"is-a"关系
  • 抽象基类(ABC)可以定义接口规范

总结:Python的继承机制提供了强大的面向对象编程能力,合理使用可以大大提高代码的可维护性和可扩展性。

Python中的多态

  1. 多态的简介和动态绑定
  • 多态是面向对象编程的三大特性之一(封装、继承、多态),它允许不同类的对象对同一消息做出不同的响应。在Python中,多态的实现非常灵活自然。
  • 对多态的理解:Python的多态主要基于"鸭子类型"概念——“如果它走起来像鸭子,叫起来像鸭子,那么它就是鸭子”。不关注对象的类型,而是关注对象的行为(方法)。
  • 动态绑定:方法调用是在运行时根据对象的类型决定的。
  1. 多态的实现方式
  • 运算符重载
class Vector:def __init__(self, x, y):self.x = xself.y = ydef __add__(self, other):# 这里的other还不知道具体的是什么,但是可以在方法内部进行调用return Vector(self.x + other.x, self.y + other.y)def __str__(self):return f"Vector({self.x}, {self.y})"v1 = Vector(1, 2)
v2 = Vector(3, 4)
print(v1 + v2)  # 输出: Vector(4, 6)
  • 鸭子类型的多态
class Car:def drive(self):return "汽车行驶中..."class Bicycle:def drive(self):return "自行车骑行中..."def start_vehicle(vehicle):print(vehicle.drive())car = Car()
bike = Bicycle()start_vehicle(car)   # 输出: 汽车行驶中...
start_vehicle(bike)   # 输出: 自行车骑行中...
  1. Python多态的优势
  • 灵活性:不需要严格的继承关系,只要对象有相应的方法即可
  • 可扩展性:添加新类不影响现有代码
  • 简洁性:代码更简洁易读

Python的多态体现了其动态语言的特性,使得代码更加灵活和易于扩展。

http://www.xdnf.cn/news/375913.html

相关文章:

  • FreeRTOS Queue消息队列-笔记
  • AlimaLinux设置静态IP
  • 护网HVV初级蓝队面试题总结
  • Axure :基于中继器的列表删除 、 列表编辑
  • 自动语音拨号系统V2.6.0产品说明书
  • Dockers部署oscarfonts/geoserver镜像的Geoserver
  • BERT类模型
  • CenOS7切换使用界面
  • 推荐一款免费开源工程项目管理系统软件,根据工程项目全过程管理流程开发的OA 办公系统
  • 基于定制开发开源AI智能名片S2B2C商城小程序的公私域流量融合运营策略研究
  • 策略路由更改路径
  • Best Video下载器——抖音视频去水印工具
  • day21python打卡
  • 【Linux第三章】vim
  • HTTP/2概览及内核解析
  • excel大表导入数据库
  • comfyu BiRefNet-General模型下载及存放地方
  • JS正则表达式介绍(JavaScript正则表达式)
  • 《Python星球日记》 第51天:神经网络基础
  • 边缘计算从专家到小白
  • iperf3的介绍与舒勇
  • Kubernetes 生产实战(十五):生产环境敏感信息纳入Secret管理指南
  • MLOps 详解
  • 汇编语言的温度魔法:单总线温度采集与显示的奇幻之旅
  • Java动态代理超详细解析:三步+内存图(堆栈分析)
  • 批量统计PDF页数,统计图像属性
  • dify插件接入fastmcp示例
  • Flink 实时数据一致性与 Exactly-Once 语义保障实战
  • Linux架构篇、第四章_ELK与EFK-7.17.9的日志管理
  • 深入解析Vue3中ref与reactive的区别及源码实现