习题41 学习面向对象术语

这一节学习的是面向对象术语。


单词练习

首先要求是要记住一些术语,就是单词的定义。

  • class:类。告诉Python创建新类型的东西。
  • object:对象。最基本的东西,或是某个东西的实例。
  • instance:实例。让Python创建一个类时得到的东西。原文:What you get when you tell Python to create a class.
  • def:这是在类里面定义函数的方法。
  • self:在类的函数中,self指代被访问的对象或者实例的一个变量。
  • inheritance:继承。指一个类可以继承另一个类的特性,和父子关系类似。
  • composition:组合。指一个类可以将别的类作为它的部件构建起来,有点儿像车子和车轮的关系。
  • attribute:属性。类的一个属性,它来自于组合,而且通常是一个变量。
  • is-a:是什么。用来描述继承关系,如Salmon is-a Fish(鲑鱼是一种鱼)。原文:as in a "salmon" is-a "fish."
  • has-a:有什么。用来描述某个东西是由另外一些东西组成的,或者某个东西有某个特征,如Salmon has-a mouth(鲑鱼有一张嘴)。原文:as in "a salmon has-a mouth."


书上的意思就是要记住上面这些个东西,有什么用一会儿就知道了。


语汇练习

然后给了一些代码吧,大概就是用上了上面的单词(Word)构成了一些短语(Phrase)。

  • class X(Y)  

创建一个叫X的类,它是Y的一种。

  • class X(object):def__init__(self,J)  

类X有一个__init__j接收self和J作为参数。

  • class X(object):def M(self,J)  

类X有一个函数名称为M,它接收self和J作为参数。 

  • foo = X()
将foo设为类X的一个实例。

  • foo.M(J)

从foo中找到M函数,并使用self和J参数调用它

  • foo.K = Q

从foo中获取K属性,并将其设为Q。

其中每一条的X,Y,M,J,K,Q及foo的地方,都可以将他们当做空白点来对待。


阅读代码

来一段试试,这段代码调用了一个叫urllib的库。

运行之前我要说一下,这段代码应该是从网址上获取了一个库,然后无穷无尽的练习这些术语,但是对于中文母语的我真的蛋疼。

import random
from urllib import urlopen
import sys

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
PHRASE_FIRST = False
if len(sys.argv) == 2 and sys.argv[1] == "english":
    PHRASE_FIRST = True

# load up the words from the website
for word in urlopen(WORD_URL).readlines():
    WORDS.append(word.strip())


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

    for i in range(0,snippet.count("@@@")):
        param_count = random.randint(1,3)
        param_names.append(','.join(random.sample(WORDS,param_count)))

    for sentence in snippet,phrase:
        result = sentence[:]

        # fake class names
        for word in class_names:
            result = result.replace("%%%",word,1)

        # fake other names
        for word in other_names:
            result = result.replace("***",word,1)

        # fake parameter lists
        for word in param_names:
            result = result.replace("@@@",word,1)

        results.append(result)

    return results


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

        for snippet in snippets:
            phrase = PHRASES[snippet]
            question,answer = convert(snippet,phrase)
            if PHRASE_FIRST:
                question, answer = answer, question


            print question

            raw_input("> ")

            print "ANSWER: %s\n\n" % answer
except EOFError:
    print "\nBye"

运行结果就不放图了。

主要是要分析一下这段代码。但是我目前水平渣渣,有部分不太懂。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值