Python系列之笨方法学Python是我学习《笨方法学Python》—Zed A. Show著

的学习思路和理解,如有不如之处,望指出!!!

本节学习面向对象术语

[TOC]

单词练习

  • 类(class):告诉python创建新类型的东西

  • 对象(object):两个意思,即最基本的东西,或者某个东西的实例

  • 实例(instance):让python创建一个时得到的东西

  • def:创建函数

  • self:在类的函数中,self指代被访问的对象或者实例的一个变量

  • 继承(inheritance):指一个类可以继承另一个类的特性,和父子关系类似

  • 组合(composition):指一个类可以将别的类作为它的部件构建起来,有点像车子和车轮的关系

  • 属性(attribute):类的一个属性,它来自于组合,而且通常是一个变量

  • 是什么(is-a):用来描述继承关系,如Salmon is-a Fish(鲑鱼是一种鱼)

  • 有什么(has-a):用来描述某个东西是由另外一些东西组成的,或者某个东西有某个特征,如Salmon has-a mouth(鲑鱼有一张嘴)

语汇练习

  1. class X(Y):创建一个叫X的类,它是Y的一种

  2. class X(object):def_init_(self,J):类X有一个_init_接收selfJ作为参数

  3. class X(object):def M(self,J):类X有一个函数名称为M,它接收selfJ作为参数

  4. foo=X():将foo设为类X的一个实例

  5. foo.M(J):从foo中找到M函数,并使用selfJ参数调用它

  6. foo.K=Q:从foo中获取K属性,并将其设为Q

每一条中,你看到X、Y、M、J、K、Q及foo的地方,都可以将它们当作空白点来对待。例如,可以将句子写成下面这样

  1. 创建一个叫???的类,它是Y的一种

  2. ???有一个_init_,能接收self???作为参数

  3. ???有一个函数名称为???,可以接收self???作为参数

  4. foo设为class ???的一个实例

  5. foo中找到???函数,并使用self???参数调用它

  6. foo中获取???属性,并将其设为???

源代码

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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# ex41.py
import
from
import

WORD_URL="http://learncodethehardway.org/words.txt"
WORDS=[]

PHRASES={
"class %%%(%%%):"
"Make a class named %%% that is-a %%%."
"class %%%(object):\n\tdef _init_(self,***)"
"class %%% has-a _init_ that takes self and *** parameters."
"class %%%(object):\n\tdef ***(self, @@@)"
"class %%% has-a function named *** that takes self and @@@ parameters."
"***=%%%()"
"Set *** to an instance of class %%%."
"***.***(@@@)"
"From *** get the *** function, and call it with parameters self,@@@."
"***.***='***'"
"From *** get the *** attribute and set it to '***'."
}

# do they want to drill phrases first
PHRASES_FIRST=False
if
PHRASES_FIRST=True

# load up the words from the website
for
WORDS.append(word.strip())

def
class_names=[w.capitalize() for
random.sample(WORDS,snippet.count("%%%"
other_names=random.sample(WORDS,snippet.count("***"
results=[]
param_names=[]

for
param_count=random.randint(1
param_names.append(','

for
result=sentence[:]

# fake class names
for
result=result.replace("%%%"
# fake other names
for
result=result.replace("***"
# fake parameter lists
for
result=result.replace("@@@"

results.append(result)
return

# keep going until they hit CTRL-D
try
while
snippets=PHRASES.keys()
random.shuffle(snippets)

for
phrase=PHRASES[snippet]
question,answer=convert(snippet,phrase)
if
question,answer=answer,question

print

raw_input("> "
print
except
print

应该看到的结果

代码解释

目前能力不够,不能完全解释和理解每一段代码的作用

下面仅介绍部分需要注意的知识

  1. Python异常处理

最后一段用try/except语句来检测异常

语法:

1
2
3
4
5
6
7
8
try
<语句> #运行别的代码
except
<语句> #如果在try部份引发了'name'异常
except
<语句> #如果引发了'name'异常,获得附加的数据
else
<语句> #如果没有异常发生

try的工作原理是,当开始一个try语句后,python就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里,try子句先执行,接下来会发生什么依赖于执行时是否出现异常。

  • 如果当try后的语句执行时发生异常,python就跳回到try并执行第一个匹配该异常的except子句,异常处理完毕,控制流就通过整个try语句(除非在处理异常时又引发新的异常)。

  • 如果在try后的语句里发生了异常,却没有匹配的except子句,异常将被递交到上层的try,或者到程序的最上层(这样将结束程序,并打印缺省的出错信息)。

  • 如果在try子句执行时没有发生异常,python将执行else语句后的语句(如果有else的话),然后控制流通过整个try语句。

更多关于Python异常处理的资料


这是**《笨方法学Python》**的第二十三篇文章

希望自己可以坚持下去

希望你也可以坚持下去

后面的内容多为《笨方法学Python》的实战了,更新会变慢了,也更难理解了