在之前讨论面向过程和面向对象的区别时,我们提到了一个等式:面向对象 = 对象 + 类 + 继承 + 消息
从中我们可以看到继承是面向对象的语言中一个重要的组成部分,继承是一种连接类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表达共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生或子类,而原始类称为新类的基类或父类。派生类可以从基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。
那么python也是面向对象的语言,那它的类的继承是什么样子的呢?
首先我们需要了解以下内容:
单继承的强调的是“单”,即一个派生类只有一个基类。
class 派生类名称(基类名称):
body
#单继承
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()#输出
总结:
从上面的代码中,我们可以发现,当派生类在使用构造方法的时候,除了要完成自己新增属性的初始化之外,还要显式调用基类的构造函数(基类名称调用),并且提供其需要的参数,继承类是不会自动调用基类的构造函数的。
多层继承的实质是单继承,无非是将前一步继承的派生类当做下一次继承的基类再进行继承。由于比较简单,所以用图例说明即可。
多继承强调多,即一个派生类可以同时拥有多个基类。
class 派生类名称(基类名称1,基类名称2,...):
body
#单继承
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(基类2)
class 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()#输出