继承

继承(Inherit)

继承的概念

  • 子类继承父类的内容,包括字段、方法、属性。
  • 将多个类共有的方法提取到父类中,子类仅需继承父类而不必一一实现每个方法。
  • 基类和派生类只是与父类、子类的叫法不一样

查看继承

class.__bases__#__base__只查看从左到右继承的第一个子类,__bases__则是查看所有继承的父类

继承的查找顺序

先在自己对象里找,然后去类里找,最后去父类里去找

哪一个对象调用,self就是代指的哪一个对象,(父类,子类里的self,都是对象)

多继承

  1. Java和C#中则只能继承一个类,Python的类可以继承多个类
  2. Python的类如果继承了多个类,那么其寻找方法的方式有两种,分别是:深度优先和广度优先
  • python2中分经典类和新式类,经典类为深度优先,新式类为广度优先。
    • 经典类:自定义最开始的类不继承任何东西
    • 新式类:自定义最开始的类继承object类
  • python3种自定义的类全部默认继承新式类,均为广度优先

  • 深度优先
    • 示例
  • 广度优先
    • 示例

 

在子类中重用父类的属性
方式一
指名道姓: (不依赖继承)
新方法下执行

def new():
    父类.方法()
    父类.__init__() #调用父类的init方法

方式二
super() (依赖继承)
super(自己类名,self).方法() 得到一个父类的对象
super(自己类名,self).__init__()
python3简写为super().方法()
super()从mro列表当前位置往后去找,

抽象类和接口类

from abc import ABCmeta, abstractmethod
class Person(classmeta=ABCmeta)
  • 抽象类:
    • 在Python中,默认是有的
    • 父类的方法子类必须实现
    • 抽象类不能被实例化
    • 抽象类内的方法可以被简单实现
    • 抽象类不建议多继承
  • 借口类:
    • 做出一个良好的抽象,这个抽象规定了一个兼容接口,使得外部调用者无需关心具体细节,可一视同仁的处理实现了特定接口的所有对象
    • 在python中,默认是没有的,只是一种程序设计理念
    • 接口类的方法不能被实现
    • 接口隔离原则:
      • 应该有多个独立的接口,而不是多功能的单个接口
    • 接口类推荐使用多继承
posted @ 2018-06-18 10:32  感动#心  阅读(96)  评论(0编辑  收藏  举报