一,什么是继承?

答:继承是一种创新类的方式,新建的类可以集成一个或多个父类(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()

 四:

 

posted on 2018-05-02 14:55  wy0925  阅读(152)  评论(0编辑  收藏  举报