IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 继承和多态-面向对象-python -> 正文阅读

[Python知识库]继承和多态-面向对象-python

1、继承

继承是一种创建新类的方式,新建的类可称为子类或派生类,父类又可称为基类或超类,子类会遗传父类的属性。

  • 格式

    class 子类(父类):
    	pass
    
  • 特点

    • 在继承中,基类的构造方法(_init_()方法)不会自动调用,需要在子类的构造方法中显示调用
    • 在调用基类的方法时需要加上基类的类名前缀,并带上 self 参数变量。区别于在类中调用普通函数时不需要带 self 参数。
    • 在 Python 中,首先查找对应类型的方法,如果在子类中找不到对应的方法,才到基类中逐个查找。
    • 子类获得了父类全部非私有的功能。
    • 子类不能继承父类中的私有方法,也不能被调用父类的私有方法。
    • 对于父类中扩展的非私有方法,子类可以拿来即用。
  • 示例:

class People:
    def __init__(self, name, age):
        self.__name = name
        self.__age = age

    def run(self):
        print('{}正在跑步'.format(self.__name))


class Student(People):
    def __init__(self, name, age, classroom):
        super().__init__(name, age)
        self.__classroom = classmethod


s = Student('小明', 15, '高一2班')
s.run()

2、多继承

  • 优点:子类可以同时遗传多个父类的属性,最大限度地重用代码

  • 缺点:

    1. 违背人的思维习惯:继承表达的是一种什么"是"什么的关系
    2. 代码可读性会变差
    3. 不建议使用多继承,有可能会引发可恶的菱形问题,扩展性变差
  • 如果多继承是菱形继承,经典类与新式类的属性或者方法查找顺序不一样:

    • 新式类:广度优先,会在检索最后一条分支的时候检索大脑袋
  • 示例:继承关系[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hCMNKzxk-1640602466859)(I:\study\python\oob\oob-multi-inherit.drawio.png)]

    class A:
        def test(self):
            print('from A')
    
    
    class B(A):
        def test(self):
            print('from B')
    
    
    class C(A):
        def test(self):
            print('from C')
    
    
    class D(B, C):
        pass
    
    
    d = D()
    d.test()
    

3、多态

在python中没有方法重载,只有重写(覆盖),即子类方法和父类同名的方法。

  • 作用

    • 让具有不同功能的函数可以使用相同的函数名,这样就可以用一个函数名调用不同内容(功能)的函数。
  • 特点:

    1. 只关心对象的实例方法是否同名,不关心对象所属的类型;
    2. 对象所属的类之间,继承关系可有可无;
    3. 多态的好处可以增加代码的外部调用灵活度,让代码更加通用,兼容性比较强;
    4. 多态是调用方法的技巧,不会影响到类的内部设计。
  • 场景

    • 对象所属的类之间没有继承关系

      class Duck(object):                                  # 鸭子类
          def fly(self):
              print("鸭子沿着地面飞起来了")
      
      class Swan(object):                                  # 天鹅类
          def fly(self):
              print("天鹅在空中翱翔")
      
      class Plane(object):                                 # 飞机类
          def fly(self):
              print("飞机隆隆地起飞了")
      
      def fly(obj):                                        # 实现飞的功能函数
          obj.fly()
      
      duck = Duck()
      fly(duck)
      
      swan = Swan()
      fly(swan)
      
      plane = Plane()
      fly(plane)
      
      ===运行结果:===================================================================================
      鸭子沿着地面飞起来了
      天鹅在空中翱翔
      飞机隆隆地起飞了
      
      
    • 对象所属的类之间有继承关系(应用更广)

      class gradapa(object):
          def __init__(self,money):
              self.money = money
          def p(self):
              print("this is gradapa")
       
      class father(gradapa):
          def __init__(self,money,job):
              super().__init__(money)
              self.job = job
          def p(self):
              print("this is father,我重写了父类的方法")
       
      class mother(gradapa): 
          def __init__(self, money, job):
              super().__init__(money)
              self.job = job
       
          def p(self):
               print("this is mother,我重写了父类的方法")
               return 100
               
      #定义一个函数,函数调用类中的p()方法
      def fc(obj): 
          obj.p()
      gradapa1 = gradapa(3000) 
      father1 = father(2000,"工人")
      mother1 = mother(1000,"老师")
      
      fc(gradapa1)            #这里的多态性体现是向同一个函数,传递不同参数后,可以实现不同功能.
      fc(father1)
      print(fc(mother1))
      ===运行结果:===================================================================================
      this is gradapa
      this is father,我重写了父类的方法
      this is mother,我重写了父类的方法
      100
      
      

参考文章:

参考视频:https://www.bilibili.com/video/BV1R7411F7JV 239~247

源代码仓库:https://gitee.com/gaogzhen/python-study

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-12-28 22:52:51  更:2021-12-28 22:55:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 3:40:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码