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

    一、类的继承

    什么是继承:继承是一种新建类的方式,继承了一个类,类中的属性和方法就在字类中

    被继承的类叫做:父类/基类

    继承的类叫做:字类/派生类

    新式类:只要继承了object类,就是新式类,在python3中,默认继承object类/在python2中,需要显示的指定继承object

    经典类:没有继承object的类,就是经典类,Python3中没有经典类,只有Python2中才有

    class A(object):
        pass
    
    class C:
        pass
    
    # B继承了A,C类
    class B(A, C):
        pass
    
    # 类名
    print(B.__name__)
    # B的父类
    print(B.__bases__)
    

    二、利用继承减少代码冗余,菱形问题

    # 属性的查找顺寻
    # 先找对象-->类中找-->父类中找(多继承)-->报错
    
    class Person(object):
        school = 'old_boy'
        
        def __init__(self, name, age):
            self.name = name
            self.age = age
            
    class Teacher(Person):
        pass
    
    class Student(Person):
        pass
    
    # 继承的菱形问题(显示的都继承一个类,不是object类):
    # 新式类(py3中全是新式类): 广度优先---从左侧开始,一直往上找,找到菱形的顶点结束(不包括菱形顶点),继续下一个继承的父类往上找,找到菱形的顶点结束(不包括菱形顶点),最后找到菱形顶点
    
    # 经典类(只有py2中才有): 深度优先---从左侧开始,一直往上找,找到菱形的顶点结束(包括菱形顶点)继续下一个继承的父类往上找,找到菱形的顶点结束(不包含菱形顶点)
    

    三、重用父类的两种方式

    # 第一种方式:父类.__init__方法
    class Person:
        def __init__(self, name ,age):
            self.name = name 
            self.age = age
          
    class Teacher(Person):
        def __init__(self, name, age, level):
            A.__init(self, name ,age)
            self.level = level
            
    # 第二种方式:super()方法
    class Person(object):
        school = 'oldboy'
        def __init__(self,name,age):
            self.name=name
            self.age=age
        def study(self):
            print('study....')
    
    class Student(Person):
        school = 'yyyy'
        def __init__(self,name,age,course):
            #super() 会按照mro列表拿到父类对象
            #对象来调用绑定方法,不需要传递第一个参数(self)
            super().__init__(name,age)
            #经典类和新式类
            #经典类中必须这么写(py3中没有经典类),都用上面那种方式写
            # super(Student,self).__init__(name,age)
            self.course=course
        def study(self):
            # Person.study(self)
            super().study()
            # print("%s学生在学习"%self.name)
    
    
    
  • 相关阅读:
    课程设计之第一次冲刺---第三天(11.13-11.14)
    课程设计之第一次冲刺---第二天(11.12)
    课程设计之第一阶段冲刺---第一天(11.11)
    团队贡献分分配
    尸体解剖
    回答自己的提问
    第三阶段冲刺--第2天
    第三阶段冲刺--第1天
    对其他组评价的反馈
    《一个程序猿的生命周期》读后感
  • 原文地址:https://www.cnblogs.com/17vv/p/11420639.html
Copyright © 2011-2022 走看看