zoukankan      html  css  js  c++  java
  • CSIC_716_20191126【面向对象编程--继承】

    继承

    什么是继承:继承是新建类的一种方式,通过此方式生成的类称为子类、或者 派生类,被继承的类称为父类、基类或超类。在python中,一个子类可以继承多个父类。

    继承的作用:减少代码的冗余,提高开发效率。

    如何实现继承:在定义类的基础上,在类名后加上(父类名)。   class Teacher(Human):  ----------->Teacher类继承自Human类

    类似于类和对象谁先有的关系,父类和子类的关系也类似。先在子类中抽象出父类,再改写子类进行继承。

    在有继承关系的类中,实例化出的对象在查找相关属性时,会先在对象的名称空间中找,再到子类的名称空间中找,最后到父类的名称空间中找,若全部都找不到,就会报错。


    派生

    子类继承父类的属性与方法,并派生出属于自己的属性与方法。

    如果子类中的方法名与父类中的重名,会优先使用子类的。相当于其他语言中的重写。

    派生的两种实现方式:特别强调,在编程时,务必二选一,严禁混用

    1、指名道姓式

    # _*_ coding: gbk _*_
    # @Author: Wonder
    class Human:
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
    
    class Teacher(Human):
        def __init__(self, name, age, gender):
            Human.__init__(self, name, age)
            self.gender = gender
    
    
    teacher1 = Teacher('abc', 19, 'male')
    print(teacher1.name, teacher1.age, teacher1.gender)  # abc 19 male
    

      

    2、super (  )   方法

    # _*_ coding: gbk _*_
    # @Author: Wonder
    class Human:
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
    
    class Student(Human):
        def __init__(self, name, age, hobby):
            super().__init__(name, age)
            self.hobby = hobby
    
    
    student1 = Student('Henry', 18, 'swimming')
    print(student1.name, student1.age, student1.hobby)  # Henry 18 swimming
    

      

    经典类与新式类

    在python2中,如果没有明确标明是object的子类,都属于经典类。

    在python3中,无论有没有标明是object的子类,全部都是新式类,可以理解为全部继承自object类。

    在多继承的情况下,会将查找顺序写入mro列表中,

    经典类的查找顺序:深度优先,一开始就刨根问底,此处的底一定不可以是object的子类。

    新式类的查找顺序:广度优先,全部遍历完之后,最后触底object,python3中底可以不做任何申明,但python2中一定要声明object才可以当成新式类处理。

    新式类提供了方法   .mro方法查看查找序列。super()方法是严格按照mro序列进行查找的,特别注意,有个广度优先原则在里面。

  • 相关阅读:
    line-height 对a标签在有些浏览器中不支持
    git 学习手记
    nth-child 与 nth-of-type区别
    less学习笔记(持续更新)
    如何让textarea的placeholder中的文字换行
    livereload 不刷新页面 保存文件后 浏览器自动重新刷新
    优雅降级元(CSS JS)
    vw vh vm CSS长度单位
    NODE_PATH的设置
    EF学习笔记(十二):EF高级应用场景
  • 原文地址:https://www.cnblogs.com/csic716/p/11935910.html
Copyright © 2011-2022 走看看