Python(二十二)面向对象编程

一. 面向对象的核心特性

1.class 类

一个类即对一类具有同属性的对象的抽象,蓝图,原型。在类中定义了这些对象都具有的属性,共同的方法。

2.object 对象

一个对象即是一个类的实例化后的对象,比如人类(class),实例化成小明(object),实例化后的对象具有类共同的属性,也可以具有自己特别的属性。

3.Encapsulation封装

在类中对数据的赋值,内部调用对外部用户是透明的,这使类变成了一个胶囊或容器,里面包含着类的数据和方法。

4.Inheritance 继承

一个类可以派生出多个子类,子类可以使用父类的属性和方法。

5.Polymorphism 多态

一个基类派生出多个子类,这些子类继承了父类同样的属性和方法,同时也对父类的方法做出了不同的实现。

二. 何为面向对象编程

编程分为两种基本方式:面向过程,面向对象。

简单来说,当我们按照解决一件事的思路,逐条滤清内容和设计程序,直到将问题解决,那么这是面向过程编程。

面向对象是从实体(对象object)出发,设计出相应的包含属性和方法的模板(类class),完成对真实世界的描述,并相互产生互动解决问题。

三. 举例:完成《人狗大战》游戏

面对人狗大战的游戏,首先我们确定两个游戏当中的角色:狗,人。同时他们分别具有自己的属性(血量,体力等)以及行为(咬人,打狗)

Python(二十二)面向对象编程_第1张图片

# 所以可以看到人和狗,两个对象在游戏中所具备的基本属性如上。那么我在玩游戏的时候,游戏的方式,可以自定义名字,并通过type或gender来区别杀伤力,给游戏带来可玩性,那么我们需要一个模板来根据我们的输入的参数来自定义实体:

Python(二十二)面向对象编程_第2张图片

# 这样我便通过两个实体,根据要求创建模板,外界输入相应的参数进行创建即可;也就是说通过对象,根据条件创建类,外界输入想要的参数进行创建实体参与互动即可。

但显然这里虽然有入参name和type,并没有对其进行能力值区分,接下来我们区分下:Python(二十二)面向对象编程_第3张图片 

# 模板得到了改良,通过模板创建的对象具有类共同的属性同时也具有自身不同的属性 。对象已经可以得到创建,那么接下来应该是落实到对象之间的互动:

Python(二十二)面向对象编程_第4张图片

# 狗咬人

Python(二十二)面向对象编程_第5张图片 # 人打狗

这样对象通过模板创建,再相互产生互动。

紧接着我们会发现一个问题,如果互动代码按照这样书写,可是人能发起的动作如果按照为狗发起动作的代码来执行,也是可以的,这样就会造成执行出问题,我们再对代码进行修改:

Python(二十二)面向对象编程_第6张图片

# 我们将“人打狗”这个动作的代码封装进了对人对象的创建中,做成一个‘闭包’,这样人能发起动作只能针对狗子。

Python(二十二)面向对象编程_第7张图片

# 创建一个狗子对象,创建一个人对象,互动。

按照同样的方式再将“狗咬人”封装进入狗子的创建代码中,即可完成。 

四. 类与方法与属性

一些基本的概念按照白话输出后,我们引入类class和对应的方法,将上面的代码进行改造:

Python(二十二)面向对象编程_第8张图片

 

# 定义狗子的类

Python(二十二)面向对象编程_第9张图片

  # 定义人的类

其实两者的基本逻辑是一样的,其中还涉及到了闭包的原理。再调用二者,创建两个实例,进行互动:

Python(二十二)面向对象编程_第10张图片

 注:数据结构很重要

 

你可能感兴趣的:(自学系列,Python,计算机知识碎片自上而下,开发语言,python)