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

原文地址:https://www.cnblogs.com/XuChengNotes/p/11418999.html