zoukankan      html  css  js  c++  java
  • 继承

    什么是继承?
      继承指的是类与类之间的关系,是一种什么“是”什么的关系,继承的功能之一就是用来解决代码重用问题
      继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可以成为基类或超类,新建的类称为派生类或子类
    什么是派生?
      当子类继承的父类,自己又在自己类当中又定义的了新类,这个类叫派生

    python中类的继承分为:单继承和多继承

    class ParentClass1: #定义父类
        pass
    
    class ParentClass2: #定义父类
        pass
    
    class SubClass1(ParentClass1): #单继承,基类是ParentClass1,派生类是SubClass
        pass
    
    class SubClass2(ParentClass1,ParentClass2): #python支持多继承,用逗号分隔开多个继承的类
        pass

    在子类派生出的新方法中重用父类方法有两种:
      1.指名道姓 (不依赖继承)
      2.super() (依赖继承)

    指名道姓继承

    class Hero:
        def __init__(self, name, life, attc):
            self.name = name
            self.life = life
            self.attc = attc
    
        def attack(self,enemy):
            self.life -= enemy.attc
    
    
    class Garen(Hero):
        camp = 'demaxiya'
        def __init__(self,name, life, attc, weapon): #定义类
            Hero.__init__(self, name, life, attc) #指名道姓重用父类方法
            self.weapon = weapon
    
        def attack(self, enemy):
            Hero.attack(self,enemy) #指名道姓使用父类方法
            print('from Garen Class')
    
    class Riven(Hero):
        camp = 'nox'
    
    
    s1 = Garen('盖伦', 100, 30, '大刀')
    s2 = Riven('瑞文', 80, 50)
    
    print(s1.weapon)

    super()方法继承

    class Hero:
        def __init__(self, name, life, attc):
            self.name = name
            self.life = life
            self.attc = attc
    
        def attack(self,enemy):
            self.life -= enemy.attc
    
    
    class Garen(Hero):
        camp = 'demaxiya'
        def __init__(self,name, life, attc, weapon): #定义类
            super().__init__(name, life, attc) #
            self.weapon = weapon
    
        def attack(self, enemy):
            super().attack(enemy) #依赖继承
            print('from Garen Class')
    
    class Riven(Hero):
        camp = 'nox'

     继承实现原理:

    python会计算出一个方法解析顺序(MRO)列表,这个MRO列表就是一个简单的所有基类的线性顺序列表。

    为了实现继承,python会在MRO列表上从左到右开始查找基类,直到找到第一个匹配这个属性的类为止

    1. 子类会先于父类被检查
    2. 多个父类会根据它们在列表中的顺序被检查
    3. 如果对下一个类存在两个合法的选择,选择第一个父类

    如果继承了多个父类,那么属性的查找方式有两种,分别是:深度优先和广度优先

  • 相关阅读:
    [对android程序作代码混淆]
    用smali实现Android apk的简单汉化
    防止java反编译的一些常用方法
    http抓包工具推荐WSockExpert/httpwatch/HttpAnalyzer/DebugBar
    JSP动态网站环境搭建应用中的详细步骤(Tomcat和Apache/IIS的整合)
    22、Secondary Tiles
    21、磁贴和磁贴通知(tile)(下)
    19、Context Menu
    代码管理工具
    20、磁贴和磁贴通知(tile)(上)
  • 原文地址:https://www.cnblogs.com/zhengyiqun1992/p/10192486.html
Copyright © 2011-2022 走看看