• 面向对象三大特性-继承


    一、什么是继承:

      继承就是一种新建类的一种方式。

    二、为什么要用继承

      减少代码的冗余

    通过代码来讲解
    class
    Student: def __init__(self, name, age, sex): self.name = name self.age = age self.sex = sex def choice_course(self): print('%s is choice coursing' % self.name) class Teacher: def __init__(self, name, age, sex, tea_id): self.name = name self.age = age self.sex = sex self.tea_id = tea_id def set_score(self, student_obj): print('%s is set_score to %s' % (self.name, student_obj.name))
    '''
    我这里定义了一个Teacher和Student类,这样写没用什么问题,但是上面有很多重复性的代码,怎么解决这个问题,就要用到继承特性分析一下,在init方法中有很多重复的代码,
    这样我们再建一个类,这个类设置成他们的父类,在这个类中设置init方法
    '''
    class People:
    def __init__(self, name, age, sex):
    self.name = name
    self.age = age
    self.sex = sex

    class Student(People):
    def __init__(self, name, age, sex):
    People.__init__(self, name, age, sex) # 这种是一个类中,直接通过类名.属性,调用到另一个类的属性,这和继承没用关系
    # super(Student,self).__init__(name,age,sex) #这种是通过super方法,访问到该类的父类的属性,这和继承有关

    def choice_course(self):
    print('%s is choice coursing' % self.name)


    class Teacher(People):
    def __init__(self, name, age, sex, tea_id):
    super(Teacher, self).__init__(name, age, sex)
    self.tea_id = tea_id

    def set_score(self, student_obj):
    print('%s is set_score to %s' % (self.name, student_obj.name)
    ### 有个知识点:调用父类属性的两种方式
    # 1、通过类名.属性,,只是直接访问类的一个属性,记住这个继承是没用关系的
    # 2、通过super方法,super.属性 可以访问到其父类的属性 这个是跟继承是有关系
    
    
     下面我讲一下,其实一个类他是可以同时继承多个父类的,那么就有一个问题了,那查找属性的顺序是怎么样的?
    # 讲这个我先讲下 类分为新式类和经典类
    # 新式类:凡是继承object类的类以及他的子类,这些都是新式类 在python3中,所有类都会默认继承object类,所以python3只有新式类
    # 经典类:凡是没用继承object类的类及其子类,这些都是经典类 在python2中,既有新式类也有经典类

    # 如果这个类只有一个父类,那么它的属性查找顺序是(用对象调属性)
    # 该对象的名称空间、对象对应类的名称空间、该类的父类的名称空间,该类父类的父类的名称空间。。。。一直找到object类
    # 如果这个类有多个父类,那么他的属性查找顺序是(对象调属性)
    # 下面举个例子
    # class C(object):
    # a = 'c'
    #
    # class B(object):
    # a = 'b'
    #
    # class D(object):
    # a = 'd'
    #
    # class F(B, C, D):
    # pass
    #
    # print(F.a)
    # print(F.__bases__)
    # 那么F的查找顺序就是先B,C,D 你可以试试运行下,将各个类下的a属性注释掉,就可以验证出来
    # 由于这是在python3中,这些类都是新式类,而新式类查找方法是广度优先:所以查找顺序是F、B、 C、 D、object 最后才是找object
    # 那如果这些类是经典类的话,查找方式深度优先:所以顺序是F、B、object、 C、 D

    # 总结一点:新式类的查找方式:广度优先
    # 经典类的查找方式:深度优先
     
  • 相关阅读:
    题目1.A乘以B
    题目1.A乘以B
    秋季学习总结
    题目1.A乘以B
    第一周作业
    C语言I博客作业02
    Silverlight中图像的变换(1)
    SQL SERVER 2005安装过程中COM+错误解决!
    c++ 对文件的操作
    JS标准DES加解密
  • 原文地址:https://www.cnblogs.com/zhuchunyu/p/9833003.html
Copyright © 2020-2023  润新知