python学习笔记:类的继承

python中类的继承

在之前讨论面向过程和面向对象的区别时,我们提到了一个等式:面向对象 = 对象 + 类 + 继承 + 消息

从中我们可以看到继承是面向对象的语言中一个重要的组成部分,继承是一种连接类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表达共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生或子类,而原始类称为新类的基类或父类。派生类可以从基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。

那么python也是面向对象的语言,那它的类的继承是什么样子的呢?

首先我们需要了解以下内容:

  • python支持单继承,多层继承,多继承
  • 可以通过继承的方式来获得父类中的非私有属性和非私有方法
  • 在继承中基类的构造方法(即:_ _ init _ _()方法)不会被自动调用,它需要在其派生类的构造中手动调用。(这一点要和C++,java区别开来)
  • 在调用基类的方法时,需要加上基类的类名前缀,且需要加上self参数。
  • python总是首先查找对应类型的方法,如果在派生类中找不到对应的方法,它才开始在基类逐个查找对应的方法(派生类——>基类)

单继承

单继承的强调的是“单”,即一个派生类只有一个基类。

  • 语法:
class  派生类名称(基类名称):
	body
  • 图例
    python学习笔记:类的继承_第1张图片

  • 代码示例

#单继承
class Person:
    def __init__(self,name='',age=0):
        self.name=name#姓名
        self.age=age#年龄

    def show(self,end=" "):
        print("基类中的show()方法:")
        print(self.name,self.age,end=end)

#单继承:Student类(派生类)继承Person类(基类)
class Student(Person):
    def __init__(self,name,age,num):
        Person.__init__(self,name,age)
        self.num=num#学号

    def show(self):#重写基类中的show()方法,以适应派生类的需求
        print("派生类中的show()方法:")
        Person.show(self,' ')#调用基类中的show()方法
        print(self.num)

s=Student("tom",21,1)#实例化Student类
s.show()#输出

python学习笔记:类的继承_第2张图片

总结:
从上面的代码中,我们可以发现,当派生类在使用构造方法的时候,除了要完成自己新增属性的初始化之外,还要显式调用基类的构造函数(基类名称调用),并且提供其需要的参数,继承类是不会自动调用基类的构造函数的。

多层继承

多层继承的实质是单继承,无非是将前一步继承的派生类当做下一次继承的基类再进行继承。由于比较简单,所以用图例说明即可。

python学习笔记:类的继承_第3张图片

多继承

多继承强调多,即一个派生类可以同时拥有多个基类。

  • 语法
    逗号隔开
class  派生类名称(基类名称1,基类名称2,...):
	body
  • 图例
    python学习笔记:类的继承_第4张图片
  • 代码示例
#单继承
class Person:
    def __init__(self,name='',age=0):
        self.name=name#姓名
        self.age=age#年龄

    def show(self,end=" "):
        #print("基类Person中的show()方法:")
        print(self.name,self.age,end=end)

class University:
    def __init__(self,dept='',major=''):
        self.dept=dept#学院
        self.major=major#专业

    def show(self,end=" "):
        # print("基类University中的show()方法:")
        print(self.dept,self.major,end=end)

#多继承:Undergraduate类(派生类)继承Person类(基类1)和University(基类2class Undergraduate(Person,University):
    def __init__(self,name,age,dept,major,num):
        Person.__init__(self,name,age)
        University.__init__(self,dept,major)
        self.num=num#学号

    def show(self):#重写基类中的show()方法,以适应派生类的需求
        # print("派生类中的show()方法:")
        Person.show(self,' ')#调用基类中的show()方法
        University.show(self, ' ')  #调用基类中的show()方法
        print(self.num)

s=Undergraduate("tom",21,"计算机学院","计算机科学与技术专业",1)#实例化Student类
s.show()#输出

python学习笔记:类的继承_第5张图片
注意:
从上面的代码中,我们可以知道,在多继承中,父类中的方法和属性子类都可以使用。

你可能感兴趣的:(Python)