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

    类的继承

    什么是继承

    • 继承是一种创建新类的方式,新建的类可以继承一个或多个父类(python支持多继承),父类可以称为基类或超类,新建的类称为派生类或子类
    • 继承的特性是:子类会遗传父类的属性
    • 继承是类与类之间的关系

    为什么用继承

    • 子类会"遗传"父类的属性,从而使用继承可以减少代码冗余

    对象的继承

    • python中支持继承一个或多个父类
    class Parent1:
        pass
    
    class Parent2:
        pass
    
    class Son1(Parent1):  # 单继承
        pass
    
    class Son2(Parent1, Parent2):  # 多继承
        pass
    
    • 使用__bases__方法可以获取对象继承的类
    print(Son2.__bases__)
    print(Parent1.__bases__)  
    
    (<class '__main__.Parent1'>, <class '__main__.Parent2'>)
    (<class 'object'>,)
    

    新式类与经典类

    • 只有在python2中才分新式类和经典类,python3中统一都是新式类
    • 在python2中,声明继承object类的类,以及该类的子类,都是新式类;没有声明继承object类的类都是经典类
    • 在python3中,无论是否继承object,都默认继承object,即python3中所有类均为新式类

    继承与抽象

    继承描述的是子类与父类之间的关系,要找出这种关系,必须先抽象再继承,抽象即抽取类似或者说比较像的部分。

    抽象分为两个层次:

    1.将对象比较像的部分抽取成类
    2.将类比较像的部分抽取成父类
    

    继承:基于抽象的结果,通过编程语言去实现它,肯定是先经历抽象这个过程,才能通过继承的方式去表达出抽象的结构

    继承的应用

    • 拿选课系统举例
    class People:
        def __init__(self, name, age, gender):
            self.name = name
            self.gender = gender
            self.age = age
    
    
    class Student(People):
        def choose_course(self):
            print(f'{self.name} 选课')
    
    
    class Teacher(People):
        def teach_course(self):
            print(f'{self.name} 授课')
    
    
    stud = Student('tank', 18, 'male')
    tea = Teacher('nick', 40, 'male')
    
    stud.choose_course()
    tea.teach_course()
    
    tank 选课
    nick 授课
    

    对象属性查找顺序

    class People:
        def __init__(self, name, age, gender):
            self.name = name
            self.gender = gender
            self.age = age
        
        def choose_course(self):
            print('from People')
    
    
    class Student(People):
        def choose_course(self):
            print('from Student')
    
    stud = Student('tank', 18, 'male')
    stud.choose_course()
    
    from Student
    
    class People:
        def __init__(self, name, age, gender):
            self.name = name
            self.gender = gender
            self.age = age
        
        def choose_course(self):
            print('from People')
            
    class Student(People):
        pass
    
    stud = Student('tank', 18, 'male')
    stud.choose_course()
    
    from People
    

    对象查找属性的顺序:对象自己--->对象的类--->父类--->父类。。。

  • 相关阅读:
    谷歌(google)广告尺寸大小列表
    D盘Program Files 文件夹里文件不显示,没隐藏。怎么才能显示出来?
    请问IOS中做一个手机网站的app壳复杂吗?
    zblog2.X 连不上数据库原因
    二叉查找树的实现与讲解(C++)
    记一次应用异常,处理过程
    C# RSA加密
    js对象 c#对象转换
    C# 微信消息模板 发送
    iis 虚拟目录 文件服务器
  • 原文地址:https://www.cnblogs.com/863652104kai/p/11051539.html
Copyright © 2011-2022 走看看