zoukankan      html  css  js  c++  java
  • Python 面向对象_继承、组合

    今日内容

    • 组合:自定义类的对象作为类的属性
    • 继承:父类与子类、多继承

    1.组合

    将自定义类的对象作为类的属性
    
    class Teacher:
        def __init__(self, name):
            self.name = name
    
    class Student:
        def __init__(self, name, teacher):
            self.name = name
            self.teacher = teacher
    
    tec = Teacher('zhangsan')
    stu = Student('lisi', tec)
    
    print(stu.teacher.name)
    

    2.继承

    2.1 继承
    继承:子类与父类形成的一种关系,可以让子类能直接从父类中获取属性与方法
    优点:减少代码冗余
    
    2.2 语法
    class 类名(父类名):pass
    
    继承关系:
    	1.父类的所有未封装的属性和方法,子类都能访问
    	2.父类的所有封装的属性和方法,子类都不能访问
    		--外界通过子类或子类对象,都不能访问
    		--在子类内部也不能访问
    
    2.3 方法的重写
    有继承关系下的属性查找顺序:
    	-优先找自身,自身没有找父类
    	-父类没有找父类的父类
    	-(python3)一直找到最顶级的父类,如果还没有就报错
    抽离-派生理解:
    	先写子类, 抽离 出父类
    	先写父类, 派生 出子类 
    
    先写好父类的方法,由于父类方法的功能不满足子类需求
    子类还可以重写父类方法:方法名与父类相同,自定义方法的实现体
    
    2.4 重用
    还需要父类方法的功能,在父类方法的基础上再添加新功能
    突破点:在子类中去调用父类的方法,还有保证调用者是子类
    
    2.5 __init__结合super()方法
    默认父级的__init__可以被继承过来
    但是会出现子类对象的属性比父类多
    
    例子:
    def __init__(self, name, salary):
    	super().__init__(name)  # 父级有的共性功能通过super()交给父级做,子类特有的自己来完成
    	self.salary = salary
    
    2.6 简单的多继承
    子类可以继承所有父类的所有可继承属性
    
    属性查找顺序:优先找自己的,没有则按照继承先后顺序查找父级
    	类名.mro() # 打印属性查找的顺序
    
    2.7 经典类和新式类
    经典类:Python2中才有,没有继承任何类的类  深度优先
    新式类:Python2中直接或间接继承object的类
    	Python3中所定义的所有类都是新式类 广度优先
    
  • 相关阅读:
    【学习笔记/题解】树上启发式合并/CF600E Lomsat gelral
    【学习笔记/题解】虚树/[SDOI2011]消耗战
    【题解】 [GZOI2017]小z玩游戏
    【题解】CF1426E Rock, Paper, Scissors
    【题解】CF1426D Non-zero Segments
    【题解】NOIP2018 填数游戏
    【题解】NOIP2018 旅行
    【题解】NOIP2018 赛道修建
    【题解】时间复杂度
    【题解】「MCOI-02」Convex Hull 凸包
  • 原文地址:https://www.cnblogs.com/xt12321/p/10750836.html
Copyright © 2011-2022 走看看