今日内容

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

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中所定义的所有类都是新式类 广度优先

Python 入门基础20 --面向对象_继承、组合的更多相关文章

  1. python 入门基础21 --面向对象_多态、内置方法、反射

    内容: 1.接口思想 2.抽象类思想 3.多态 4.内置方法 5.反射 1.接口思想 建立关联的桥梁,方便管理代码 接口类:用来定义功能的类,位继承它的子类提供功能 该类的功能方法一般不需要实现体,实 ...

  2. Python入门基础学习(面向对象)

    Python基础学习笔记(四) 面向对象的三个基本特征: 封装:把客观事物抽象并封装成对象,即将属性,方法和事件等集合在一个整体内 继承:允许使用现有类的功能并在无须重新改写原来的类情况下,对这些功能 ...

  3. Python 入门基础19 --面向对象、封装

    2019.04.17 一.面向对象与面向过程 二.名称空间操作 三.类与对象的概念 四.语法 五.对象查找属性的顺序 2019.04.18 1.类与对象的所有概念:__init__方法 2.类的方法与 ...

  4. 二十. Python基础(20)--面向对象的基础

    二十. Python基础(20)--面向对象的基础 1 ● 类/对象/实例化 类:具有相同属性.和方法的一类人/事/物 对象(实例): 具体的某一个人/事/物 实例化: 用类创建对象的过程→类名(参数 ...

  5. Python进阶(十五)----面向对象之~继承(单继承,多继承MRO算法)

    Python进阶(十五)----面向对象之~继承 一丶面向对象的三大特性:封装,继承,多态 二丶什么是继承 # 什么是继承 # b 继承 a ,b是a的子类 派生类 , a是b的超类 基类 父类 # ...

  6. Python 入门 之 初识面向对象

    Python 入门 之 初识面向对象 1.初识面向对象编程 (核心--对象) (1)观察以下代码: # 面向过程编程 s = "alexdsb" count = 0 for i i ...

  7. Python 入门基础6 --字符编码、文件操作1

    今日内容: 1.字符编码 2.字符与字节 3.文件操作 一.字符编码 了解: cpu:将数据渲染给用户 内存:临时存放数据,断电消失 硬盘:永久存放数据,断电后不消失 1.1 什么是编码? 人类能够识 ...

  8. Python入门基础学习 三

    Python入门基础学习 三 数据类型 Python区分整型和浮点型依靠的是小数点,有小数点就是浮点型. e记法:e就是10的意思,是一种科学的计数法,15000=1.5e4 布尔类型是一种特殊的整形 ...

  9. Python入门基础学习 二

    Python入门基础学习 二 猜数字小游戏进阶版 修改建议: 猜错的时候程序可以给出提示,告诉用户猜测的数字偏大还是偏小: 没运行一次程序只能猜测一次,应该提供多次机会给用户猜测: 每次运行程序,答案 ...

随机推荐

  1. Java常用工具方法

    以GET请求形式获取文本文件内容 /** * 以GET请求形式获取文本文件内容 * @param url http下载地址,比如http://www.abc.com/123.css * @return ...

  2. ceph 安装ceph问题汇总

    1.在不同节点安装ceph时,出现以下异常: 参考这里 ceph deploy RuntimeError: NoSectionError: No section: 'ceph' 解决方法: 在报错的机 ...

  3. MT【15】证明无理数(1)

    证明:$tan3^0$是无理数. 分析:证明无理数的题目一般用反证法,最经典的就是$\sqrt{2}$是无理数的证明. 这里假设$tan3^0$是有理数,利用二倍角公式容易得到$tan6^0,tan1 ...

  4. 关于min_25筛的一些理解

    关于min_25筛的一些理解 如果想看如何筛个普通积性函数啥的,就别往下看了,下面没有的(QwQ). 下文中,所有的\(p\)都代表质数,\(P\)代表质数集合. 注意下文中定义的最小/最大质因子都是 ...

  5. 创建首个 Android 项目

    Android 项目包括构成你的 Android 应用的源代码的所有文件. 利用 Android SDK 工具可以简单的创建 默认项目目录和文件来开始一个新的 Android 项目. 本节课展示了如何 ...

  6. 【BZOJ5286】[HNOI2018]转盘(线段树)

    [BZOJ5286][HNOI2018]转盘(线段树) 题面 BZOJ 洛谷 题解 很妙的一道题目啊.(全世界除了我这题都有40分,就我是一个状压选手 首先来发现一些性质,我们走一圈一定不会更差. 为 ...

  7. 【loj3054】【hnoi2019】鱼

    题目 描述 ​ 难以描述.......慢慢看..: ​ https://loj.ac/problem/3054 范围 ​ $6 \le n \le 1000  ,  1 \le |x| , |y| \ ...

  8. Yosimite10.10(Mac os)安装c/c++内存检测工具valgrind

    1.下载支持包m4-1.4.13.tar.gz $ curl -O http://mirrors.kernel.org/gnu/m4/m4-1.4.13.tar.gz 2. 解压m4-1.4.13.t ...

  9. Linux网络协议栈(一)——Socket入门(1)

    转自: http://www.cnblogs.com/hustcat/archive/2009/09/17/1568738.html 1.TCP/IP参考模型为了实现各种网络的互连,国际标准化组织(I ...

  10. TCP UDP 封包过程

    数据封装 注: Ethernet 协议规定 DatalinkHeader 是 14 bytes,分别是6字节目的MAC地址.6字节源MAC地址.2字节数据包类型: 4字节FCS(frame check ...