图解Python面向对象
- 格式:pptx
- 大小:359.78 KB
- 文档页数:17


Python面向对象课程简介培训对象对Python面向对象编程感兴趣已掌握基础的Python面向过程编程用Python自主开发大、中型应用系统有未来从事Python相关开发职业目标的技能目标了解面向对象编程的基本知识掌握Python语言中类的定义与使用方法掌握Python中类的属性与方法及其应用掌握Python中类继承与多态、方法重载会用继承和组合来完成项目的面向对象分析和代码实现怎样学习 1.掌握Python基本语法及顺序、选择、循环基本程序的编写技能2.注意掌握面向对象的基础知识3.听课及时做笔记,供复习4.课后多做实践,理论联系实际才是最好的学习方式5.加入一些群、论坛等,帮人解决问题,提升自己面向对象与面向过程产生背景科学计算为目标的必然产物鸡兔同笼1.先假设全部为鸡(兔),计算出腿数2.然后算出腿数量差3.得出鸡(兔)数量4.计算出另一种动物的数量软件应用领域的扩张和系统膨胀之后应运而生编程方法自顶向下自底向上代码主体结构程序=数据(变量)+算法(函数/过程)程序=对象+交互数据操作主体由函数/过程进行加工与展现在对象的方法中加工与展现模拟方法通过函数/过程操纵表现世界的数据与状态把世界描绘成具有主动性的对象之间交互编程思维搞清处理数据的步骤面向对象分析运行效率较高稍低面向对象入门对象编程体验一款简单自动运行小游戏模拟:在一维的地图上,有一只虫子和一只蚂蚁。
每一次他们都走过一个-3,-2,2,3个随机单位的距离(选定走法,若达 到地图边界则放弃移动)。
当蚂蚁、虫子处于同一位置时,蚂蚁吃掉虫子,程序结束。
PO虫子的初始位置蚂蚁的初始位置进入循环(条件为蚂蚁和虫子不在同一位置)依照规则,蚂蚁和虫子移动位置直到蚂蚁和虫子走到同一位置,程序结束OO游戏中的对象有:地图、虫子、蚂蚁地图是一维的,只需要记录虫子和蚂蚁的位置蚂蚁和虫子知道自己的位置蚂蚁和虫子能按规则移动定义地图、蚂蚁、虫子三个类主程序中实例化它们,并通过对象间的交互来完成游戏的模拟理解对象对象可以指自然界中的任何事物计算机为解决某个领域问题所使用的事物(自然界中的事物的模型化)事物(对象)具有自身的特征或能力计算机中的对象具有解决问题所需的特征或能力对象优越性封装将模型的特征和能力打包在一起模型的改变由模型自身来完成,就像自然界的事物一样隐藏模型的细节,外界只能使用他,而不必/不能改变他继承符合自然界的分类规律快速的代码重用多态子类可以继承父类的特征与能力,还可以通过自定义来修改其特征与能力鸭子类型(duck typing)1组合一个模型可以由其他的模型组成定义和使用类最简类定义类实例化类与实例之间关系定义类就是建立模型(模子/印章)实例化类就是建立真实事物(产品/印章印出的图案)有特征和能力的类特征/属性,是类自身包含或知道的数据能力,以方法体现,是类具有能动性的体现实例化步骤调用__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)。
Python之⾯向过程和⾯向对象的区别⼀、⾯向过程 1、⾯向过程:核⼼是过程⼆字,过程指的是解决问题的步骤,好⽐如设计⼀条流⽔线,是⼀种机械式的思维⽅式。
就是程序从上到下⼀步步执⾏,⼀步步从上到下,从头到尾的解决问题。
基本设计思路就是程序⼀开始是要着⼿解决⼀个⼤的问题,然后把⼀个⼤问题分解成很多个⼩问题或⼦过程,这些⼦过程再执⾏的过程再继续分解直到⼩问题⾜够简单到可以在⼀个⼩步骤范围内解决。
2、优缺点: 优点:将复杂的问题流程化,进⽽简单化。
缺点:扩展性差 3、实例:⾯向过程式的登录注册程序 import json,redef login():'''⽤户输⼊:return:'''usename = input('⽤户名:').strip()pwd = input('密码:').strip()tel = input('电话:').strip()mail = input('邮箱:').strip()return {'usename':usename,'pwd':pwd,'tel':tel,'mail':mail}def authentication(use_info):'''判断⽤户名和密码等信息是否合法:return:'''is_valid = True # 默认合法if len(use_info['usename'])==0:print('⽤户名不能为空!')is_valid = Falseif len(use_info['pwd'])< 6:print('密码长度不得⼩于6位!')is_valid = Falseif len(re.findall('1[0-9]{10}',use_info['tel']))==0:print('电话格式不对!')is_valid = Falseif not re.search(r'@.*?.com$',use_info['mail']).group(): # 使⽤Python的r前缀,就不⽤考虑转义的问题,'*'加个?就可以让'.'采⽤⾮贪婪匹配print('邮箱格式不对')is_valid = Falsereturn {'valid':is_valid,'info':use_info}def register(auth):'''若输⼊信息合法则注册,写⼊⽂件或数据库:param auth::return:'''if auth['valid']==True:with open('data.json','w',encoding='utf-8') as f:json.dump(auth['info'],f)def main():'''主逻辑程序:return:'''use_info = login()auth = authentication(use_info)register(auth)if__name__=='__main__': # 直接调⽤时执⾏下列程序,被调⽤时不执⾏main()View Code 注意:⼀般认为,如果你只是写⼀些简单的脚本,去做⼀些⼀次性任务,⽤⾯向过程的⽅式是极好的,但如果你要处理的任务是复杂的,且需要不断迭代和维护的,那还是⽤⾯向对象最⽅便。