一,什么是继承?
答:继承是一种创新类的方式,新建的类可以集成一个或多个父类(Python支持多继承),父类又可称为基类或超类,新建的类称为派生类或者子类.
子类会"遗传"父类的属性,从而解决代码重用问题
Python中的类的继承分为:单继承与多继承
class ParentClass1:#定义父类 pass class ParentClass2:#定义父类 pass class SubClass1(ParentClass1):#单继承,基类是ParentClass1,派生类是SubClass pass class SubClass2(ParentClass1,ParentClass2):#Python支持多继承,用逗号分隔开多个继承的类 pass #查看继承 print SubClass1.__bases__#__base__只查看从左到右继承的第一个子类,__bases__则是查看所有继承的父类
'''
1.只有在python2中才分新式类和经典类,python3中统一都是新式类
2.在python2中,没有显式的继承object类的类,以及该类的子类,都是经典类
3.在python2中,显式地声明继承object的类,以及该类的子类,都是新式类
3.在python3中,无论是否继承object,都默认继承object,即python3中所有类均为新式类
'''
#如果没有指定基类,python的类会默认继承object类,object是所有python类的基类
继承的顺序:
python到底是如何实现继承的,对于你定义的每一个类,Python会计算出一个方法解析(MRO)列表,这个MRO列表就是一个简单的所有基类的线性顺序列表
为了实现继承Python会在MRO列表上从左到右开始查找基类,知道找到第一个匹配这个属性的类为止,而这个MRO列表的构造是通过一个C3线性化算法来实现的,所有父类的MRO列表遵循如下三条准则:
1)子类会先于父类被检查
2,多个父类会根据他们在列表中的顺序被检查
3,如果对下一个类存在两个合法的选择,选择第一个父类
二:子类中调用父类的方法:子类继承了父类的方法,然后想调用父类方法
class Vehichle: #定义交通工具类 Country = 'China' def __init__(self,name,speed,load,power): self.name = name, self.speed = speed, self.load = load, self.power = power def run(self): print "开动了" class SubWay(Vehichle):#地铁 def __init__(self,name,speed,load,power,line): #调用父类方法: Vehichle.__init__(self,name,speed,load,power) self.line = line def show_info(self): print (self.name) def run(self): Vehichle.run(self) print ("djff") line13 = SubWay('be','100m/s',10000,'电',"222") #实例化 line13.show_info() line13.run()
三,super调用父类的方法
class Vehichle: #定义交通工具类 Country = 'China' def __init__(self,name,speed,load,power): self.name = name, self.speed = speed, self.load = load, self.power = power def run(self): print ("开动了") class SubWay(Vehichle):#地铁 def __init__(self,name,speed,load,power,line): #调用父类方法: # Vehichle.__init__(self,name,speed,load,power) super().__init__(name,speed,load,power) self.line = line def show_info(self): print (self.name) def run(self): # Vehichle.run(self) super().run() print ("djff") line13 = SubWay('be','100m/s',10000,'电',"222") #实例化 line13.show_info() line13.run()
四: