zoukankan      html  css  js  c++  java
  • python之继承

    一,什么是继承?

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

     四:

  • 相关阅读:
    maven项目下出现java.lang.ClassNotFoundException: ContextLoader异常
    jquery使用post方法传值
    商品筛选条件
    商品的上架
    使用fckeditor上传多张图片
    多选删除
    升讯威 .Net WinForm 开源控件使用——c#
    设置label(标签)控件的背景颜色为透明
    鼠标拖动控件跟随——C#
    Chart控件系列教程——c#
  • 原文地址:https://www.cnblogs.com/wangyue0925/p/8980279.html
Copyright © 2011-2022 走看看