zoukankan      html  css  js  c++  java
  • 类的继承

    类的继承

    ''''''
    
    
    # 继承的语法
    
    # 先定义一个父类
    class Person:
        msg = 'hello world'
    
        def fn(self):
            print('xxx')
    
    
    # 定义一个子类
    class Student(Person):
        pass
    
    # 子类会得到父类中的属性和方法
    
    '''
    继承与抽象
    抽象就是将多个类中,抽出相同的属性和方法,建立一个父类
    正确使用继承:
         1.先抽象再继承
         2.继承现在已存在的类,拓展或是修改原始的功能
    
    属性的查找顺序
    会先去对象中找,如果对象中没有去类中找,类里面没有再去父类中找
    父类中没有再去父类的父类中找,以此类推最后回去object中寻找,再找不到直接报错
    
    继承的原理(mro列表)
        类名.mro()
    '''
    
    '''
    派生与覆盖
    当子类中出现了与父类不相同的方法和属性时,就称这类子类为派生类
    一般性子类都会与父类不同,所以通常说派生类就是子类
    
    覆盖 overrides
    当子类出现了与父类名称相同的属性和方法时 就称之为覆盖
    '''
    
    
    '''
    子类访问父类中的属性和方法
    方式一:
          super(当前类名,self).你要调用父类中的属性或方法    python2中必须这样进行调用
    方式二:
          super().你要调用父类中的属性或方法    python3中新的语法
    方式三:
          类名.你要调用父类中的属性和方法    使用这种方法时根本就不需要继承了
    
    强调:当你继承一个父类时,使用init将父类覆盖时,
         必须在初始化第一行调用父类init方法进行传值,并出入父类所需的参数
    '''
    
    '''
    组合
    在讲组合之前需要弄清楚继承与组合的区别:
        继承:描述两个对象之间的关系,什么是什么的关系
        组合:也是一种关系,描述两个对象之间 是什么有什么的关系
    组合是将一个对象当做另一个对象的属性传入
    
    组合的目的:
        为了重用现有的代码
        什么时候使用继承:分析两个类的关系,到底是不是:什么是什么的关系 
        什么时候使用组合:如果两个类之间 没有太大的关系,完全不属于同类  
        另外组合相比继承,耦合度更低了 
    '''
    
    '''
    菱形继承
        在python3中表面上是广度寻找,广度没找到再去深度寻找,
        本质上是,先进行深度寻找,找到共同的父类,再进行广度寻找
        
        在python2中,直接进行深度寻找,再去广度寻找,
        
        
        
    ##### 补充:新式类与经典类
    python3中任何类都是直接或间接继承了Object 
    新式类,任何显式或隐式地继承自object的类就称之为新式类, python3中全都是新式类  
    经典类,既不是Object的子类 ,仅在python2中出现  
    当出现了菱形继承时,新式类,先深度,当遇到了共同父类时就广度 
    ​新式类,就是深度优先
    
    '''
  • 相关阅读:
    centos7安装 mysqlclient 报错的解决办法
    linux yum配置代理
    mysql 基础知识
    centos7 安装MySQL
    win安装mysql
    centos7 安装Mariadb
    python socket
    python 协程
    python 线程
    python 进程
  • 原文地址:https://www.cnblogs.com/asdaa/p/11247501.html
Copyright © 2011-2022 走看看