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

    一、什么是继承

    • 继承是一种新建类的方式,新建的类称为子类,被继承的类称为父类
    • 继承的特性是:子类会遗传父类的属性
    • 继承是类与类之间的关系

    二、为什么用继承

    • 使用继承可以减少代码的冗余

    三、如何显示的声明继承

    class 类名(父类1,父类2):
    pass

    • Python中支持一个类同时继承多个父类
    class Parent1:
        pass
    
    
    class Parent2:
        pass
    
    
    class Sub1(Parent1, Parent2):
        pass
    
    • 使用__bases__方法可以获取当前类直接继承的父类
    print(Sub1.__bases__)
    (<class '__main__.Parent1'>, <class '__main__.Parent2'>)
    
    • 在Python3中如果一个类没有继承任何类,则默认继承object类
    • 在Python2中如果一个类没有继承任何类,不会继承object类
    print(Parent1.__bases__)
    (<class 'object'>,)
    

    四、类的分类

    • 后面会详细解释类的分类,目前仅做了解

    4.1 新式类

    • 继承了object的类以及该类的子类,都是新式类
    • Python3中所有的类都是新式类

    4.2 经典类

    • 没有继承object的类以及该类的子类,都是经典类
    • 只有Python2中才有经典类

    五、继承的应用

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

    六、继承中属性查找的顺序

    之前说过属性查找的顺序。那么,在继承中,属性查找的顺序是什么呢?

    先找 当前对象-> 类中找 -> 父类中找(多继承) -> 报错

    首先,类实例化会自动调用__init__方法如果类中没有,去父类中找

    class Person(object):
        school = 'xxx'
    
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
    
    class Teacher(Person):
        pass
    
    
    class Student(Person):
        pass
    
    
    # 类实例化会自动调用__init__如果类中没有,去父类中找
    # stu1=Student()   #报错,因为父类中必须传两个参数
    stu1 = Student('xucheng', 18)
    # stu1.school='yyy'
    print(stu1.school)
    

    xxx

    6.1 多层继承的查找顺序

    和之前的说的查找方式一样。

    先找 当前对象-> 类中找 -> 父类中找(多继承) -> 报错

    #多层继承
    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)
    

    BBB

    6.2 多继承的查找顺序

    class 类名(父类1,父类2):
    pass

    查找顺序 当前对象-> 类中找 -> 父类中找(多继承) -> 报错

    当前对象和当前类中没有时,就会去找父类。从继承的多个父类中,依次从左到右的去寻找。

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

    CCC

  • 相关阅读:
    单(single)
    cdq分治
    寿司
    qtth
    二分,倍增的一些思考(lost my music:可持久化栈)
    手写堆、哈希表
    保留字,关键字
    测试19,20,21
    要买的书
    测试18:T2:可爱精灵宝贝
  • 原文地址:https://www.cnblogs.com/XuChengNotes/p/11418999.html
Copyright © 2011-2022 走看看