• 类的继承


    一、继承介绍

    1、什么是继承

    继承是一种新建类的方式,继承了一个类,类中的属性和方法就在子类中。

    继承可以想象为子类继承父类的信息,父类又叫基类,子类又名派生类。

    学习python3主要是新式类,新式类是指继承了object类就是新式类,python3默认继承object。而经典类只存在于python2中,他在没有继承object时,被称为经典类。

     class A(object):
       pass
     class C:
       pass
     class B(A,C):
       pass
     #类的其他内置属性 __名字__
     print(B.__dict__)
     #类名
     print(B.__name__)
     #B的父类
     print(B.__bases__)
     
     print(C.__bases__)
       

    #类的其他内置属性 名字 {'module': 'main', 'doc': None} #类名 B #B的父类 (<class 'main.A'>, <class 'main.C'>) #C的父类 (<class 'object'>,)

    二、利用继承减少代码冗余,凌形问题

    1、利用继承减少代码冗余

    继承是指一个或多个子类从父类中继承同样的一个类型,比如说,一个学校有好多学生,这样这些学生的信息中就有一个共同点就是都在这个学校,这样我们去定义一个对象(学生)时就不需要挨个去给他们再去定义这个学校,而是让学生们去继承这个信息。这样就减少了大量的代码冗余。

    2、定义类之后我们的属性查找方法就变为了

    先找对象-->再从类中寻找-->再从父类中寻找(多继承)-->找不到报错

     class A:
         a="AAAA"
     class B(A):
         a="BBB"
     
     class C(B):
         # a="CCC"
         pass
     
     # class D(C):
     #     # a = "DDD"
     #     pass
     class D(C):
         # a = "DDD"
         pass
     
     d=D()
     print(d.a)

    上边的代码可以让我们直观的查看查找顺序,当找到一个是可以注释掉,就会去寻找下一个。

    3、重用父类属性

     class Person:
         school = 'oldboy'
     
     class Teacher(Person):
     
         def __init__(self,name,age,level):
             self.name=name
             self.age=age
             self.level=level
     
     class Student(Person):
         def __init__(self,name,age,course):
             self.name=name
             self.age=age
             self.course=course
     
     
     stu1=Student('wed',19,"Python")
     print(stu1.school)

    4、菱形问题

    继承的菱形问题(显示的都继承一个类,不是object类):新式类和经典类的查找顺序是不一样的

    1)新式类(py3中全是新式类):广度优先---从左侧开始,一直往上找,找到菱形的顶点结束(不包括菱形顶点),继续下一个继承的父类往上找,找到菱形的顶点结束(不包括菱形顶点),最后找到菱形顶点

    2)经典类(只有py2中才有):深度优先---从左侧开始,一直往上找,找到菱形的顶点结束(包括菱形顶点)继续下一个继承的父类往上找,找到菱形的顶点结束(不包含菱形定点)

    3)不出现菱形问题:正常查找

     

     

     

  • 相关阅读:
    NOI 题库 7084
    NOI 题库 7218
    POJ 2386 题解
    NOI 题库 8465
    NOI 题库 2753
    NOI 题库 1792
    P3709 大爷的字符串题
    初探莫队
    P1026 统计单词题解
    AC自动机小记
  • 原文地址:https://www.cnblogs.com/zfb123-/p/11420011.html
Copyright © 2020-2023  润新知