VII python面向对象

以下概念及举例均在python3.*中实现;

 

1

面向过程&面向对象:

op

oo

产生背景

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

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

编程方法

自顶向下

自底向上

代码主体结构

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

程序=对象+交互

数据操作主体

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

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

模拟方法

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

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

编程思维

搞清处理数据的步骤

面向对象分析

运行效率

较高

较低

 

VII python面向对象

 

鸡兔同笼:

先假设全部为鸡,计算出腿数;

算出腿数量差;

得出鸡数量;

计算另一动物的数量;

 

注:

自猜想的数据类型;

变量名为大写就认为是常量;

大小写敏感;

 

 

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进行处理,非常感谢!

上一篇 2017年10月23日
下一篇 2017年10月23日

相关推荐