python3-封装、继承和多态

系列文章目录

面向对象编程有三大重要特征:封装、继承和多态

一、封装

  • 含义:
    面向对象中的封装就是将与某类对象相关所有的数据与操作放在同一个类中,让这些代码的实现与外界隔离开来,外界想要使用或访问这些代码,就要使用我们定义好的接口。

  • 优点:
    隐藏了功能的实现,提高了系统的安全性;
    使代码更易维护。

二、继承

  • 含义:

    • 当我们定义好一个类A,这个A继承了另一个类B,那么就称A是B的子类(Subclass),B为A的父类、基类或超类(Base class 、Super class)。

    • 通过继承,子类就能获得父类的全部方法和属性,并且还能在此基础上进行覆盖和拓展。

  • 格式:

    class Foo(object):  # object是默认的父类,也是所有类的间接或直接父类
        pass
    
    class Bar(Foo):  # Bar继承了Foo
        pass
    
  • python支持多继承,一个类可以有多个父类

     class Baz(Base, Foo, Bar):
         pass
    

    当要使用Baz里的东西时,现在Baz中找,找不到就在父类里找,并且是从左往右找。所以,要注意括号内父类的顺序

  • 方法解析顺序(MRO):

    • 多继承的关系有时十分复杂,光一个从左往右找是不能解决问题的,因此python有一套专门的解析机制。在我们定义好一个类时,自动解析好查找顺序,这个顺序叫“方法解析顺序”。
    • 方法解析顺序是用C3算法解析确定的。
    • 当前类的方法解析顺序保存在类名.__mro__这个元组中。
  • super函数:

    • super函数用于在子类中调用父类的成员,最常见的就是调用初始化方法。

    • 语法格式:super(子类名, self).方法名(),python3中则可以简单得写为super().方法名()

    • 比如:子类的初始化方法要扩展属性,但又怕将父类的初始化方法覆盖掉,丢掉父类的属性,此时就可以使用super函数:

      class Foo(object):
          def __init__(self, name):
              self.name = name
      
              
      class Bar(Foo):
          def __init__(self, name, age):
              # 调用父类的__init__
              # super(Bar, self).__init__(name)
              # 简写方法
              super().__init__(name)
              
              self.age = age    
      
              
      bar = Bar('tom', 19)
      print(bar.name, bar.age)  # 打印:tom 19;父类的name也被初始化了
      
  • Mixin机制:

    多继承容易使类的关系混乱不堪,因此,python提出了Mixin机制,它实际上是一种规范,用来提高多继承代码的可读性。

    将一些不好划分的类成员,提取到一个新的类中,再让其它类继承,该类一般加一个后缀名:Mixin,表示该类仅是为了减少继承关系混乱程度而定义的。

三、多态

python是一门动态语言,原生支持多态,不需要额外的操作。

动态语言调用实例方法时不检查类型,只要方法存在,参数正确,就可以调用。这就是动态语言的“鸭子类型”,它并不要求严格的继承体系,一个对象只要“看起来像鸭子,走起路来像鸭子”,那它就可以被看做是鸭子。

下一篇

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花_城

你的鼓励就是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值