概述
-
面向过程:根据业务逻辑从上到下写垒代码
-
函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可
-
面向对象:对函数进行分类和封装,让开发“更快更好更强...”
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
%
:
#发送邮件提醒
连接邮箱服务器
发送邮件
关闭连接
|
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
%
:
发送邮件(
'内存报警'
)
|
创建类和对象
-
class是关键字,表示类
-
创建对象,类名称后加括号即可
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方法
|
-
面向对象:【创建对象】【通过对象执行方法】
-
函数编程:【执行函数】
面向对象三大特性
-
将内容封装到某处
-
从某处调用被封装的内容
-
通过对象直接调用
-
通过self间接调用
1
2
3
4
5
6
7
8
9
10
11
12
13
|
class
Foo:
def
__init__(
self
, name, age):
self
.name
=
name
self
.age
=
age
obj1
=
Foo(
'wupeiqi'
,
18
)
print
obj1.name
# 直接调用obj1对象的name属性
print
obj1.age
# 直接调用obj1对象的age属性
obj2
=
Foo(
'alex'
,
73
)
print
obj2.name
# 直接调用obj2对象的name属性
print
obj2.age
# 直接调用obj2对象的age属性
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
class
Foo:
def
__init__(
self
, name, age):
self
.name
=
name
self
.age
=
age
def
detail(
self
):
print
self
.name
print
self
.age
obj1
=
Foo(
'wupeiqi'
,
18
)
obj1.detail()
# Python默认会将obj1传给self参数,即:obj1.detail(obj1),所以,此时方法内部的 self = obj1,即:self.name 是 wupeiqi ;self.age 是 18
obj2
=
Foo(
'alex'
,
73
)
obj2.detail()
# Python默认会将obj2传给self参数,即:obj1.detail(obj2),所以,此时方法内部的 self = obj2,即:self.name 是 alex ; self.age 是 78
|
-
小明,10岁,男,上山去砍柴
-
小明,10岁,男,开车去东北
-
小明,10岁,男,最爱大保健
-
-
老李,90岁,男,上山去砍柴
-
老李,90岁,男,开车去东北
-
老李,90岁,男,最爱大保健
-
-
老张...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
函数式编程
def
kanchai(name, age, gender):
print
"%s,%s岁,%s,上山去砍柴"
%
(name, age, gender)
def
qudongbei(name, age, gender):
print
"%s,%s岁,%s,开车去东北"
%
(name, age, gender)
def
dabaojian(name, age, gender):
print
"%s,%s岁,%s,最爱大保健"
%
(name, age, gender)
kanchai(
'小明'
,
10
,
'男'
)
qudongbei(
'小明'
,
10
,
'男'
)
dabaojian(
'小明'
,
10
,
'男'
)
kanchai(
'老李'
,
90
,
'男'
)
qudongbei(
'老李'
,
90
,
'男'
)
dabaojian(
'老李'
,
90
,
'男'
)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
class
Foo:
def
__init__(
self
, name, age ,gender):
self
.name
=
name
self
.age
=
age
self
.gender
=
gender
def
kanchai(
self
):
print
"%s,%s岁,%s,上山去砍柴"
%
(
self
.name,
self
.age,
self
.gender)
def
qudongbei(
self
):
print
"%s,%s岁,%s,开车去东北"
%
(
self
.name,
self
.age,
self
.gender)
def
dabaojian(
self
):
print
"%s,%s岁,%s,最爱大保健"
%
(
self
.name,
self
.age,
self
.gender)
xiaoming
=
Foo(
'小明'
,
10
,
'男'
)
xiaoming.kanchai()
xiaoming.qudongbei()
xiaoming.dabaojian()
laoli
=
Foo(
'小明'
,
10
,
'男'
)
laoli.kanchai()
laoli.qudongbei()
laoli.dabaojian()
|
-
苍井井,女,18,初始战斗力1000
-
东尼木木,男,20,初始战斗力1800
-
波多多,女,19,初始战斗力2500
-
草丛战斗,消耗200战斗力
-
自我修炼,增长100战斗力
-
多人游戏,消耗500战斗力
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
# -*- coding:utf-8 -*-
# ##################### 定义实现功能的类 #####################
class
Person:
def
__init__(
self
, na, gen, age, fig):
self
.name
=
na
self
.gender
=
gen
self
.age
=
age
self
.fight
=
fig
def
grassland(
self
):
"""注释:草丛战斗,消耗200战斗力"""
self
.fight
=
self
.fight
-
200
def
practice(
self
):
"""注释:自我修炼,增长100战斗力"""
self
.fight
=
self
.fight
+
200
def
incest(
self
):
"""注释:多人游戏,消耗500战斗力"""
self
.fight
=
self
.fight
-
500
def
detail(
self
):
"""注释:当前对象的详细情况"""
temp
=
"姓名:%s ; 性别:%s ; 年龄:%s ; 战斗力:%s"
%
(
self
.name,
self
.gender,
self
.age,
self
.fight)
print
temp
# ##################### 开始游戏 #####################
cang
=
Person(
'苍井井'
,
'女'
,
18
,
1000
)
# 创建苍井井角色
dong
=
Person(
'东尼木木'
,
'男'
,
20
,
1800
)
# 创建东尼木木角色
bo
=
Person(
'波多多'
,
'女'
,
19
,
2500
)
# 创建波多多角色
cang.incest()
#苍井空参加一次多人游戏
dong.practice()
#东尼木木自我修炼了一次
bo.grassland()
#波多多参加一次草丛战斗
#输出当前所有人的详细情况
cang.detail()
dong.detail()
bo.detail()
cang.incest()
#苍井空又参加一次多人游戏
dong.incest()
#东尼木木也参加了一个多人游戏
bo.practice()
#波多多自我修炼了一次
#输出当前所有人的详细情况
cang.detail()
dong.detail()
bo.detail()
游戏人生
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
伪代码
class
猫:
def
喵喵叫(
self
):
print
'喵喵叫'
def
吃(
self
):
# do something
def
喝(
self
):
# do something
def
拉(
self
):
# do something
def
撒(
self
):
# do something
class
狗:
def
汪汪叫(
self
):
print
'喵喵叫'
def
吃(
self
):
# do something
def
喝(
self
):
# do something
def
拉(
self
):
# do something
def
撒(
self
):
# do something
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
伪代码
class
动物:
def
吃(
self
):
# do something
def
喝(
self
):
# do something
def
拉(
self
):
# do something
def
撒(
self
):
# do something
# 在类后面括号中写入另外一个类名,表示当前类继承另外一个类
class
猫(动物):
def
喵喵叫(
self
):
print
'喵喵叫'
# 在类后面括号中写入另外一个类名,表示当前类继承另外一个类
class
狗(动物):
def
汪汪叫(
self
):
print
'喵喵叫'
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
代码实例
class
Animal:
def
eat(
self
):
print
"%s 吃 "
%
self
.name
def
drink(
self
):
print
"%s 喝 "
%
self
.name
def
shit(
self
):
print
"%s 拉 "
%
self
.name
def
pee(
self
):
print
"%s 撒 "
%
self
.name
class
Cat(Animal):
def
__init__(
self
, name):
self
.name
=
name
self
.breed =
'猫'
def
cry(
self
):
print
'喵喵叫'
class
Dog(Animal):
def
__init__(
self
, name):
self
.name
=
name
self
.breed =
'狗'
def
cry(
self
):
print
'汪汪叫'
# ######### 执行 #########
c1
=
Cat(
'小白家的小黑猫'
)
c1.eat()
c2
=
Cat(
'小黑的小白猫'
)
c2.drink()
d1
=
Dog(
'胖子家的小瘦狗'
)
d1.eat()
|
-
是否可以继承多个类
-
如果继承的多个类每个类中都定了相同的函数,那么那一个会被使用呢?
-
当类是经典类时,多继承情况下,会按照深度优先方式查找
-
当类是新式类时,多继承情况下,会按照广度优先方式查找
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
经典类多继承
class
D:
def
bar(
self
):
print
'D.bar'
class
C(D):
def
bar(
self
):
print
'C.bar'
class
B(D):
def
bar(
self
):
print
'B.bar'
class
A(B, C):
def
bar(
self
):
print
'A.bar'
a
=
A()
# 执行bar方法时
# 首先去A类中查找,如果A类中没有,则继续去B类中找,如果B类中么有,则继续去D类中找,如果D类中么有,则继续去C类中找,如果还是未找到,则报错
# 所以,查找顺序:A --> B --> D --> C
# 在上述查找bar方法的过程中,一旦找到,则寻找过程立即中断,便不会再继续找了
a.bar()
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
新式类多继承
class
D(
object
):
def
bar(
self
):
print
'D.bar'
class
C(D):
def
bar(
self
):
print
'C.bar'
class
B(D):
def
bar(
self
):
print
'B.bar'
class
A(B, C):
def
bar(
self
):
print
'A.bar'
a
=
A()
# 执行bar方法时
# 首先去A类中查找,如果A类中没有,则继续去B类中找,如果B类中么有,则继续去C类中找,如果C类中么有,则继续去D类中找,如果还是未找到,则报错
# 所以,查找顺序:A --> B --> C --> D
# 在上述查找bar方法的过程中,一旦找到,则寻找过程立即中断,便不会再继续找了
a.bar()
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
Python伪代码实现Java或C
#的多态
class
F1:
pass
class
S1(F1):
def
show(
self
):
print
'S1.show'
class
S2(F1):
def
show(
self
):
print
'S2.show'
# 由于在Java或C#中定义函数参数时,必须指定参数的类型
# 为了让Func函数既可以执行S1对象的show方法,又可以执行S2对象的show方法,所以,定义了一个S1和S2类的父类
# 而实际传入的参数是:S1对象和S2对象
def
Func(F1 obj):
"""Func函数需要接收一个F1类型或者F1子类的类型"""
print
obj.show()
s1_obj
=
S1()
Func(s1_obj)
# 在Func函数中传入S1类的对象 s1_obj,执行 S1 的show方法,结果:S1.show
s2_obj
=
S2()
Func(s2_obj)
# 在Func函数中传入Ss类的对象 ss_obj,执行 Ss 的show方法,结果:S2.show
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
Python “鸭子类型”
class
F1:
pass
class
S1(F1):
def
show(
self
):
print
'S1.show'
class
S2(F1):
def
show(
self
):
print
'S2.show'
def
Func(obj):
print
obj.show()
s1_obj
=
S1()
Func(s1_obj)
s2_obj
=
S2()
Func(s2_obj)
|
此文为转载的,原文地址 http://3060674.blog.51cto.com/3050674/1689163