以下概念及举例均在python3.*中实现;
1、
面向过程&面向对象:
op |
oo |
|
产生背景 |
科学计算为目标的必然产物 |
软件应用领域的扩张和系统膨胀之后应运而生 |
编程方法 |
自顶向下 |
自底向上 |
代码主体结构 |
程序=数据(变量)+算法(函数|过程) |
程序=对象+交互 |
数据操作主体 |
由函数|过程进行加工与展现 |
在对象的方法中加工与展现 |
模拟方法 |
通过函数|过程操纵表现世界的数据与状态 |
把世界描绘成具有主动性的对象之间交互 |
编程思维 |
搞清处理数据的步骤 |
面向对象分析 |
运行效率 |
较高 |
较低 |

鸡兔同笼:
先假设全部为鸡,计算出腿数;
算出腿数量差;
得出鸡数量;
计算另一动物的数量;
注:
自猜想的数据类型;
变量名为大写就认为是常量;
大小写敏感;
2、
对象编程体验:
自动运行小游戏模拟:
在一维的地图上,有一只虫子和一只蚂蚁,每一次它们都走过一个-3,-2,2,3随机单位的距离(选定走法),若达到地图边界则放弃移动,当蚂蚁虫子处于同一位置时,蚂蚁吃掉虫子,程序结束;
op:
虫子的初始位置;
蚂蚁的初始位置;
进入循环(条件为蚂蚁和虫子不在同一位置);
依照规则,蚂蚁和虫子移动位置;
直到蚂蚁和虫子走到同一位置,程序结束;
oo:
游戏中的对象有:地图、虫子、蚂蚁;
地图是一维的,只需要记录虫子和蚂蚁的位置;
蚂蚁和虫子知道自己的位置;
蚂蚁和虫子能按规则移动;
定义地图、蚂蚁、虫子三个类;
主程序中实例化它们,并通过对象间的交互来完成游戏的模拟;
3、
面向对象入门:
理解对象:
对象可以指自然界中的任何事物;
计算机为解决某个领域问题所使用的事物(自然界中的事物的模型化);
事物(对象)只有自身的特征或能力;
计算机中的对象具有解决问题所需的特征或能力;
对象优越性:
封装(将模型的特征和能力打包在一起;模型的改变由模型自身来完成,就像自然界的事物一样;隐藏模型的细节,外界只能使用它,而不必(不能)改变它);
继承(符合自然界的分类规律;快速的代码重用);
多态(子类可以继承父类的特征与能力,还可通过自定义来修改其特征与能力;duck typing鸭子类型);
组合(一个模型可以由其它的模型组成);
注:
当看到一只鸟走起来像鸭子,叫起来像鸭子,游泳起来像鸭子,那么这只鸟就可被称为鸭子;
在鸭子类型中,关注的不是对象的类型本身,而是它是如何使用的;
在有的语言中必须用接口来实现;
4、
定义和使用类:
最简类定义;
类实例化;
类与实例之间的关系(
定义类就是建立模型;
实例化就是建立真实事物;
例如:模具、印章);
有特征和能力的类(
特征|属性,是类自身包含或知道的数据;
能力,以方法体现,是类具有能动性的体现);
实例化步骤(
调用__new__()方法创建实例,__new__()方法自动从object继承;
调用__init__()方法对其初始化,__init__()方法在类中定义);
添加类说明docstring(
紧跟在类名之后,以三引 包围的字符串;
查看类说明,类名.__doc__或help(类名));
新式类与经典类(
python2.*版本,默认是经典类,继承object为新式类;
python3.*版本,统一为新式类,不用继承object;
区别:经典类继承为深度优先;新式类继承为广度优先)
描述对象的特征(实例属性;类属性;私有属性;特殊属性):
实例属性:
类被实例化以后才具有的属性;
一般在__init__()方法中创建并初始化;
直接使用即定义,self.属性名;
引用方法,self.属性名;
self用来代表类的实例;
类外用实例名.属性名方式定义和引用;
相同类的不同实例,其实例属性是不相关的;
一般不建议在__init__()方法之外创建和初始化实例属性;
一般不推荐类外定义和修改,修改可以单独定义方法;
In [13]: class TestClass:
….: def __init__(self):
….: self.a = 0
….: self.b = 10
….: def info(self):
….: print ‘a:’,self.a,’b:’,self.b
….: def define_c(self):
….: self.c = 20
In [14]: tc=TestClass()
In [15]: tc.info()
a: 0 b: 10
In [16]: tc.color=’red’ #类外用
In [17]: print tc.color
red
In [18]: tca = TestClass()
In [19]: tcb = TestClass()
In [20]: tca.a = 100
In [21]: tcb.a = 200
In [22]: tca.info()
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!