• Python 学习day20


    博客整理 day 20

    继承

    什么是继承

    ​ 继承指的是新建类的方法,新建的类称之为子类或者派生类

    ​ 子类继承的类叫做父类,也称之为基类或超类

    继承的特征:

    ​ 子类可以继承父类的属性(特征与技能),并且可以派生出自己的属性(特征与技能)

    attention : 在python中,一个子类可以继承多个父类,其他语言只能一个子类继承一个父类

    为什么要继承

    ​ 继承的目的是为了减少代码冗余(减少代码量)

    如何实现继承

    1. 首先要确定好谁是子类,谁是父类

    2. 在定义类时,子类 + () ,()内写父类,实现继承

      class 父:
          name = smile
          pass
      class 子(父):
          pass
      
    #父类
    class ParentClass1:
        pass
    class PaernrtClass2:
        pass
    
    #子类
    class SubClass1(ParentClass1):
    	pass
    class SubClass2(ParentClass1,ParentClass2):
        pass
    
    #查看继承的父类:__base__.是类的属性,用来查找当前类的父亲
    print(SubClass1.__base__)
    print(SubClass2.__base__)
    

    寻找继承关系

    如何寻找继承关系:

    ​ 要想寻找继承关系,首先要'先抽象,在继承'

    什么是抽象

    ​ 抽象指的是抽取相似的部分,称之为抽象

    继承的关系

    ​ 对象是特征与技能的结合体

    ​ 类是一系列对象相同的特征与技能的结合体

    ​ 继承是一系列类相同的特种与技能的结合体

    #不继承的情况下
    #老师类
    class OldboyTeacher:
        school = 'oldboy'
        def __init__(self,name,age,sex):
            self.name = name 
            self.age = age
            self.sex = sex
            
        def change_score(self):
            print(.....)
    #学生类
    class OldboyStudent:
        school = 'oldboy'
        
        def __init__(self,name,age,sex):
            self.name = name 
            self.age = age
            self.sex = sex
            
        def choose_course(self.course):
            print(.....)
    
    #继承
    #父类
    class OldboyPeople:
        school = 'oldboy'
        
        def __init__(self,name ,age,sex):
            self.name = name 
            self.age = age
            self.sex = sex
    
    class OldboyTeacher(OldboyPeople):
        def change_score(self):
            print(.....)
       
    class OldboyStudent(OldboyPeople):
        def choose_course(self,course):
            print(.....)
            
    stu1 = OldboyStudent('smile',24,'male')
    tea1 = OldboyTeacher('simple',25,'female')
    

    对象属性查找顺序

    在继承背景下,对象属性的查找顺序:

    1. 对象查找属性会先从对象的名称空间中查找

    2. 若对象没有,则会去类里找

    3. 若当前类是子类,并且没有对象找的属性,会去父类中查找

      attention : 对象查找属性,若子类有,不管父类有没有,以子类的为准

    #查看对象名称空间
    print(tea1.__dict__)
    #查看子类名称空间
    print(tea1.__class__.__dict__)
    #查看父类名称空间
    print(tea1.__class__.__base__[0].__dict__)
    

    派生

    什么是派生

    ​ 派生指的是继承父类的属性,并且派生出新的属性(*********)

    ​ 子类派生出新的属性,若与父类的属性相同,则以子类的为准

    ​ 继承是谁与谁的关系,指的是类与类的关系,子类与父类是从属关系

    派生新的属性,并继承父类

    方式一:

    ​ 直接通过父类.(调用)__init__,把__init__当做普通函数使用,传入对象与继承的属性

    class OldboyPeople:
        def __init__(self,name,age,sex):
            self.name = name 
            self.age = age
            self.sex = sex
     
    class OldboyTeacher(OldboyPeople):
        def __init__(self,name,age,sex,level,salary):
            OldboyPeople.__init__(self.name.age.sex)
            self.level = level
            self.salary = salary
    

    方式二:

    super是一个特殊的类,在子类中调用super()会得到一个特殊的对象,通过'.'指向的事父类的名称空间

    class OldboyPeople:
        def __init__(self,name,age,sex):
            self.name = name 
            self.age = age
            self.sex = sex
            
    class OldboyTeacher(OldboyPeople):
        def __init__(self,name,age,sex,level,salsary):
            super().__init__(name,age,sex)
            self.level = level
            self.salary = salary
    

    新式类与经典类

    新式类:

    ​ 继承object的类都称之为新式类

    经典类:

    ​ 在python2中,凡是没有继承object的类都是经典类

    钻石继承

    钻石继承也可以称之为菱形继承

    在多继承的情况下形成的钻石继承(继承顺序)

    经典类:

    ​ 深度优先

    新式类:

    ​ 广度优先

  • 相关阅读:
    python __path__ 变量
    mysql-5.7.9 shutdown 语法详解
    scikit-learn随机森林调参小结
    supervisor安装部署文档和管理实例
    随机森林种类及区别--g1
    决策树算法原理--good blog
    各种排序算法的时间复杂度
    【Django2.0】python manage.py makemigrations 和 python manage.py migrate的区别
    使用Apollo做配置中心
    lock in share mode 和 select for update
  • 原文地址:https://www.cnblogs.com/samoo/p/11650505.html
Copyright © 2020-2023  润新知