面向过程编程最易被初学者接受,其每每用一长段代码来实现指定功能,开发过程当中最多见的操做就是粘贴复制,即:将以前实现的代码块复制到现需功能处。html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
while
True
:
if
cpu利用率 >
90
%
:
#发送邮件提醒
链接邮箱服务器
发送邮件
关闭链接
if
硬盘使用空间 >
90
%
:
#发送邮件提醒
链接邮箱服务器
发送邮件
关闭链接
if
内存占用 >
80
%
:
#发送邮件提醒
链接邮箱服务器
发送邮件
关闭链接
|
随着时间的推移,开始使用了函数式编程,加强代码的重用性和可读性,就变成了这样:python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
def
发送邮件(内容)
#发送邮件提醒
链接邮箱服务器
发送邮件
关闭链接
while
True
:
if
cpu利用率 >
90
%
:
发送邮件(
'CPU报警'
)
if
硬盘使用空间 >
90
%
:
发送邮件(
'硬盘报警'
)
if
内存占用 >
80
%
:
发送邮件(
'内存报警'
)
|
今天咱们来学习一种新的编程方式:面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)
注:Java和C#来讲只支持面向对象编程,而python比较灵活即支持面向对象编程也支持函数式编程编程
面向对象编程是一种编程方式,此编程方式的落地须要使用 “类” 和 “对象” 来实现,因此,面向对象编程其实就是对 “类” 和 “对象” 的使用。服务器
类就是一个模板,模板里能够包含多个函数,函数里实现一些功能函数式编程
对象则是根据模板建立的实例,经过实例对象能够执行类中的函数函数
ps:类中的函数第一个参数必须是self(详细见:类的三大特性之封装)
类中定义的函数叫作 “方法”学习
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# 建立类
class
Foo:
def
Bar(
self
):
print
'Bar'
def
Hello(
self
, name):
print
'i am %s'
%
name
# 根据类Foo建立对象obj
obj
=
Foo()
obj.Bar()
#执行Bar方法
obj.Hello(
'wupeiqi'
)
#执行Hello方法
|
诶,你在这里是否是有疑问了?使用函数式编程和面向对象编程方式来执行一个“方法”时函数要比面向对象简便spa
观察上述对比答案则是确定的,而后并不是绝对,场景的不一样适合其的编程方式也不一样。设计
总结:函数式的应用场景 --> 各个函数之间是独立且无共用的数据code
面向对象的三大特性是指:封装、继承和多态。
1、封装
封装,顾名思义就是将内容封装到某个地方,之后再去调用被封装在某处的内容。
因此,在使用面向对象的封装特性时,须要:
第一步:将内容封装到某处
self 是一个形式参数,当执行 obj1 = Foo('wupeiqi', 18 ) 时,self 等于 obj1
当执行 obj2 = Foo('alex', 78 ) 时,self 等于 obj2
因此,内容其实被封装到了对象 obj1 和 obj2 中,每一个对象中都有 name 和 age 属性,在内存里相似于下图来保存。
第二步:从某处调用被封装的内容
调用被封装的内容时,有两种状况:
一、经过对象直接调用被封装的内容
上图展现了对象 obj1 和 obj2 在内存中保存的方式,根据保存格式能够如此调用被封装的内容:对象.属性名
二、经过self间接调用被封装的内容
执行类中的方法时,须要经过self间接调用被封装的内容
综上所述,对于面向对象的封装来讲,其实就是使用构造方法将内容封装到 对象 中,而后经过对象直接或者self间接获取被封装的内容。
练习一:在终端输出以下信息
- 小明,10岁,男,上山去砍柴
- 小明,10岁,男,开车去东北
- 小明,10岁,男,最爱大保健
- 老李,90岁,男,上山去砍柴
- 老李,90岁,男,开车去东北
- 老李,90岁,男,最爱大保健
- 老张...
函数式编程
面向对象
上述对比能够看出,若是使用函数式编程,须要在每次执行函数时传入相同的参数,若是参数多的话,又须要粘贴复制了... ;而对于面向对象只须要在建立对象时,将全部须要的参数封装到当前对象中,以后再次使用时,经过self间接去当前对象中取值便可。
练习二:游戏人生程序
一、建立三个游戏人物,分别是:
- 苍井井,女,18,初始战斗力1000
- 东尼木木,男,20,初始战斗力1800
- 波多多,女,19,初始战斗力2500
二、游戏场景,分别:
- 草丛战斗,消耗200战斗力
- 自我修炼,增加100战斗力
- 多人游戏,消耗500战斗力
游戏人生
2、继承
继承,面向对象中的继承和现实生活中的继承相同,即:子能够继承父的内容。
例如:
猫能够:喵喵叫、吃、喝、拉、撒
狗能够:汪汪叫、吃、喝、拉、撒
若是咱们要分别为猫和狗建立一个类,那么就须要为 猫 和 狗 实现他们全部的功能,以下所示:
上述代码不难看出,吃、喝、拉、撒是猫和狗都具备的功能,而咱们却分别的猫和狗的类中编写了两次。若是使用 继承 的思想,以下实现:
动物:吃、喝、拉、撒
猫:喵喵叫(猫继承动物的功能)
狗:汪汪叫(狗继承动物的功能)
因此,对于面向对象的继承来讲,其实就是将多个类共有的方法提取到父类中,子类仅需继承父类而没必要一一实现每一个方法。
注:除了子类和父类的称谓,你可能看到过 派生类 和 基类 ,他们与子类和父类只是叫法不一样而已。
学习了继承的写法以后,咱们用代码来是上述阿猫阿狗的功能: