关联阅读:可能是最全的 Python 面向对象入门教程了

手机版本

关联阅读:可能是最全的 Python 面向对象入门教程了

Python面向对象

面向对象入门

对象编程体验

  • 一款简单自动运行小游戏模拟:在一维的地图上,有一只虫子和一只蚂蚁。每一次他们都走过一个-3,-2,2,3个随机单位的距离(选定走法,若达到地图边界则放弃移动)。当蚂蚁、虫子处于同一位置时,蚂蚁吃掉虫子,程序结束。

  • PO

    • 虫子的初始位置

    • 蚂蚁的初始位置

    • 进入循环(条件为蚂蚁和虫子不在同一位置)

    • 依照规则,蚂蚁和虫子移动位置

    • 直到蚂蚁和虫子走到同一位置,程序结束

  • OO

    • 游戏中的对象有:地图、虫子、蚂蚁

    • 地图是一维的,只需要记录虫子和蚂蚁的位置

    • 蚂蚁和虫子知道自己的位置

    • 蚂蚁和虫子能按规则移动

    • 定义地图、蚂蚁、虫子三个类

    • 主程序中实例化它们,并通过对象间的交互来完成游戏的模拟

理解对象

  • 对象可以指自然界中的任何事物

  • 计算机为解决某个领域问题所使用的事物(自然界中的事物的模型化)

  • 事物(对象)具有自身的特征或能力

  • 计算机中的对象具有解决问题所需的特征或能力

对象优越性

  • 封装

    • 将模型的特征和能力打包在一起

    • 模型的改变由模型自身来完成,就像自然界的事物一样

    • 隐藏模型的细节,外界只能使用他,而不必/不能改变他

  • 继承

    • 符合自然界的分类规律

    • 快速的代码重用

  • 多态

    • 子类可以继承父类的特征与能力,还可以通过自定义来修改其特征与能力

    • 鸭子类型(duck typing)

  • 组合

    • 一个模型可以由其他的模型组成

课程简介

培训对象

  • 对Python面向对象编程感兴趣

  • 已掌握基础的Python面向过程编程

  • 用Python自主开发大、中型应用系统

  • 有未来从事Python相关开发职业目标的

技能目标

  • 了解面向对象编程的基本知识

  • 掌握Python语言中类的定义与使用方法

  • 掌握Python中类的属性与方法及其应用

  • 掌握Python中类继承与多态、方法重载

  • 会用继承和组合来完成项目的面向对象分析和代码实现

怎样学习

  • 1.掌握Python基本语法及顺序、选择、循环基本程序的编写技能

  • 2.注意掌握面向对象的基础知识

  • 3.听课及时做笔记,供复习

  • 4.课后多做实践,理论联系实际才是最好的学习方式

  • 5.加入一些群、论坛等,帮人解决问题,提升自己

面向对象与面向过程

产生背景

  • 科学计算为目标的必然产物

    • 鸡兔同笼

    • 1.先假设全部为鸡(兔),计算出腿数

    • 2.然后算出腿数量差

    • 3.得出鸡(兔)数量

    • 4.计算出另一种动物的数量

  • 软件应用领域的扩张和系统膨胀之后应运而生

编程方法

  • 自顶向下

  • 自底向上

代码主体结构

  • 程序=数据(变量)+算法(函数/过程)

  • 程序=对象+交互

数据操作主体

  • 由函数/过程进行加工与展现

  • 在对象的方法中加工与展现

模拟方法

  • 通过函数/过程操纵表现世界的数据与状态

  • 把世界描绘成具有主动性的对象之间交互

编程思维

  • 搞清处理数据的步骤

  • 面向对象分析

运行效率

  • 较高

  • 稍低

定义和使用类

最简类定义

类实例化

类与实例之间关系

  • 定义类就是建立模型(模子/印章)

  • 实例化类就是建立真实事物(产品/印章印出的图案)

有特征和能力的类

  • 特征/属性,是类自身包含或知道的数据

  • 能力,以方法体现,是类具有能动性的体现

实例化步骤

  • 调用new()方法创建实例

  • new()方法自动从object继承

  • 调用init()方法对其初始化

  • init()方法在类中定义

添加类说明(docstring)

  • 紧跟类名行之后,以三引号包围的字符串

  • 查看类说明

    • 类名.doc

    • help(类名)

新式类与经典类

  • Python 2.x版本

    • 默认为是经典类

    • 继承object为新式类

  • Python 3.x版本

    • 统一为新式类不用继承object

  • 区别

    • 经典类继承为深度优先

    • 新式类继承为广度优先

课后思考

  • 类和实例是什么关系?

  • 类的属性和方法分别代表什么?

  • 类实例化的基本步骤是什么?

描述对象的特征

实例属性

  • 类被实例化以后才会具有的属性

  • 一般在init()方法中创建并初始化

  • 直接使用即定义:self.<属性名>

  • 引用方法:self.<属性名>

  • self用来代表类的实例的

  • 类外用实例名.属性名方式定义和引用

  • 相同类的不同实例其实例属性是不相关的

  • 一般不建议在init()方法之外中创建和初始化实例属性

  • 一般不推荐类外定义和修改,修改可以单独定义方法

类属性

  • 类定义后就存在,而且不需要实例化

  • 类属性使得相同类的不同实例共同持有相同变量

私有属性

  • 不提供限制属性访问的关键字(无法限制类的各种属性在类外直接访问)

  • 使用__开头的变量名加以标志,只有类对象自己能访问

  • 使用_开头的变量名加以标志,应该只有类对象及其子类能访问(非强制性)

特殊属性

  • 保存对象的元数据

  • doc

  • name

  • dict

  • module

  • base

作业

  • 定义一个类Box,具有实例属性长度(length)、宽度(width)、高度(height)。具有私有属性体积(由长、宽、高计算得来),并且它的每个实例可以知道它被实例化的数量。然后实例化它们五次,并输出每个实例的所有属性。

让对象具有能动性

类的方法的定义

  • def fun_name(self,…):    pass

  • 其中的参数self代表类的实例,在调用方法时由系统自动提供。

  • 方法定义时必须指明self参数

类的方法的调用

  • 与普通的函数调用类似

  • 在类的内部调用:self.<方法名>(参数列表)

  • 在类的外部调用:<实例名>.<方法名>(参数列表)

  • 注:以上两种调用方法中,提供的参数列表中都不用包括self

类内方法相互调用

  • 在一个类的内部方法之间是可以相应调用的

  • 调用方法同上面所述的在类的内部调用方法

构造方法及其作用

  • 构造方法就是前面课程提到和使用的init()方法

  • 构造方法的作用就是在类实例化时初始化实例

  • init()方法就是类实例化的第二步自动调用的函数

  • 注意其方法名是固定的,但其参数同普通方法一样,至少应带有self参数

  • 初始化实例包括:定义和初始化实例属性;或调用类的一些方法

  • 构造方法可以带有除self外的其它各种参数(关键字参数、默认参数、用元组收集参数、用字典收集关键字参数等);可以达到在实例化类时,为相应的属性传入指定的值。

提醒

  • 本节课所定义的都是类的实例方法,和实例属性一样,必须进行类实例化之后,才能存在和调用它们。

  • 这里使用的是Python3.x版本,print是一个函数。

作业

  • 修改上次课中定义的类Box,要求其具有:访问私有属性(体积)的方法添加颜色属性(_color)和设置与获取Box的颜色的方法添加打开和关闭盒子(Box)的方法,并且限制Box打开(关闭)之后,再次调用打开(关闭)方法会给予提示;即不能重复打开与关闭。在主程序中实例化并进行测试。

深入类的属性

同名的类属性与实例属性

  • 以实例名.属性名引用时,优先引用实例属性

  • 以类名.属性名引用时,只能引用类属性

属性访问的特殊方法(反射)

  • 提供用字符串来操作类的属性/方法的方式

  • 主要工具函数

    • hasattr(obj_bame,'属性名')

    • setattr(obj_name,'属性名',值)

    • getattr(obj_name,'属性名')

属性包装

  • 将方法包装成属性,以隐藏相关实现。

    • 控制属性的类型或范围

    • 虚拟属性(由其它属性处理后得来)

  • 三种属性操作

    • 可读:@property

    • 可写:@<property-name>.setter

    • 可删:@<property-name>.deleter

描述符

  • 将实现特殊协议方法的类作为另一个类的类属性

  • 用来拦截和控制属性访问并可以重复使用

  • 协议方法

    • get()

    • set()

    • delete()

  • 分类

    • 数据描述符(实现全部协议方法)

    • 非数据描述符(实现部分协议方法)

    • 说明:所有类成员函数都是非数据描述符

  • 同名的实例属性和非数据描述符(以方法为例)访问优先级

  • 注意:只能在新式类中使用

call()让类的实例如函数一样可调用

作业

  • 修改上节课的作业中定义的类:1.使用属性包装器将私有属性_color包装为color(可读写)属性2.运用描述符在Box类中创建一个类属性(盒子六面的图案字符,只能为数字1-6)3.为其定义call(),当作为函数调用时,返回其体积

公众号:

IT入门

回复:py10

下载高清思维导图

学习python

http://dida100.com/it/

   下载方式  

高清思维导图下载

关注下方公众号

回复:py10 

长按上方二维码即可关注

回复:web01领取

在线学免费学编程  http://dida100.com/it长按2秒学代码学单词

思维导图:python面向对象(搞笑案例)相关推荐

  1. 思维导图02----Java面向对象

    Java面向对象----思维导图 下载地址: https://download.csdn.net/download/q863672107/20016435 以下是自动转换的MakeDown文本 Jav ...

  2. python 面对对象思维导图_Python面向对象思维导图

    P ython面向对象 面 向 对 象 入 门 33 课 程 简介 17 面 向 对 象 与 面 向 过 程 26 定 义 和 使 用 类 31 描 述 对 象 的 特 征 26 让 对 象 具 有 ...

  3. python基础知识思维导图-python基础知识思维导图1

    python的发展史 - 1989年,Guido(龟叔),为ABC语言写插件,Monty Python喜剧团: - 1990年,发布python第一个版本: - 2001年,2.x:     (pyt ...

  4. 力荐!Python的14张思维导图 | 附下载方式

    (点击上方快速关注并设置为星标,一起学Python) 作者:ZY    链接: https://woaielf.github.io/2017/06/13/python3-all/#top 本文按顺序依 ...

  5. python变量命名规则思维导图_Python思维导图详解

    Python思维导图 Python思维导图详解 第一阶段:学习Python基础语法,主要学习变量的使用以及类型.变量的计算和输入输出.变量的命名.运算符.if判断语句.while循环语句.字符串.常量 ...

  6. 大数据思维导图锦集(原创吐血整理,不定期更新)

    个人思维导图主页(原创吐血整理,不定期更新)https://mm.edrawsoft.cn/homepage.html?visited=18062886 其中涵盖了:数据仓库.Hadoop.Mysql ...

  7. 收藏!字节跳动大佬整理的14张思维导图构建 Python 核心知识体系,太赞啦,拿去吧你

    本文主要涵盖了 Python 编程的核心知识(暂不包括标准库及第三方库). 按顺序依次展示了以下内容的一系列思维导图:基础知识,数据类型(数字,字符串,列表,元组,字典,集合),条件&循环,文 ...

  8. 16张思维导图+学习路线图,囊括所有Python基础,可打印

    今天给大家分享的是关于Python基础的14张思维导图,对于大家知识的梳理会有很大的帮助,另外还有两张Python学习路线图,全面系统,让初学者不走弯路.一起来看一看吧! 前面知识回顾!!!!! 程序 ...

  9. python基础知识思维导图-总结 Python 知识点思维导图

    本文主要涵盖了 Python 编程的核心知识(暂不包括标准库及第三方库). 按顺序依次展示了以下内容的一系列思维导图:基础知识,数据类型(数字,字符串,列表,元组,字典,集合),条件&循环,文 ...

最新文章

  1. java的关键字和保留字_「Java」详解常见的53个关键字
  2. 实验四 数据库SQL语言基础编程
  3. Java基于自定义注解的面向切面的实现
  4. bash循环控制语句之for循环
  5. boost::regex模块captures相关的测试程序
  6. 微盟数据库的涅槃之旅
  7. Go Web:HttpRouter路由(一)
  8. mysql取得列类型_Mysql列类型
  9. AutoMapper的介绍与使用(二)
  10. 正则不等于一个字符串_乳饮料不等于酸奶,记住一个关键词,花最少的钱买到真正的好酸奶...
  11. 循环,函数,指针作业
  12. 美国虚拟主机大打安全牌争抢国内高端外贸主机市场
  13. 单模光电转换器怎么接_单模光纤收发器怎么连接?
  14. OpenShift 4 之使用持久化存储
  15. 你关注什么,输出什么
  16. Servlet(四):转发与重定向、路径问题
  17. 统一建模语言UML概述
  18. 一种车牌识别摄像机在立体车库中的应用方案
  19. 给女朋友写一个微信小程序
  20. Lempel-Ziv算法

热门文章

  1. Python抓包并解析json爬虫
  2. VUE3 获取元素高度
  3. 无人驾驶技术入门(一):百度无人驾驶的引路人
  4. Ubuntu18.04 dsl宽带拨号连接必看!!
  5. 将.html转换成.jsp,如何将html页改成jsp
  6. 【容器】Podman和常用命令
  7. PYTHON-def函数定义和调用
  8. Android8.1 源码修改之通过黑名单屏蔽系统短信功能和来电功能
  9. Cglib BeanCopier工具类
  10. etlgr是什么服务器_什么是数据ETL