1. 程式人生 > >笨方法學Python—習題41:學習面向物件術語

笨方法學Python—習題41:學習面向物件術語

單詞練習(術語學習)

1. 類(class):            告訴Python建立新型別的東西。 2. 物件(object):           兩個意思,最基本的東西(變數、語句等等),或者某個東西的例項。 3. 例項(instance):       是讓Python建立一個時得到的東西 4. def:                           在類裡定義函式的方法 5. self:                        在類的函式中, self指代被訪問的物件或例項的一個變數。 6. 繼承(inheritance):   指一個類可以繼承另一個類的特性,和父子關係類似。 7. 組合(composition): 指一個類可將別的類作為它的部件構建起來,有點像車子和輪子的關係。 8. 屬性(attribute):       類的一個屬性,它來自於組合,而且通常是一個變數。 9. 是什麼(is-a):            用來描述繼承關係,如Salmon is-a Fish(鮭魚是一種魚) 10. 有什麼(has-a):       用來描述某個東西由另外一些東西組成的,或某個東西有某種特性:如Salmon has-a mouse

語彙練習

1. class X(Y):          建立一個叫X的類,它是Y的一種。 2. class X(object):  def __init__(self, J): 類X有一個__init__接收self和J作為引數。 3. class X(object):  def M(self, J): 類X有一個函式名為W, 它接收self和J作為引數 4. foo = X():           將foo設為類X的一個例項。 5. foo.M(J):            從foo中找到M函式,並使用self和J引數呼叫它。 6. foo.K = Q:         從foo中獲取K屬性,並將其設為Q

閱讀測試

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 PHRASES_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)         snippet = snippet.replace("%%%", word, 1)
    # fake other names     for word in other_names:         result = result.replace("***", word, 1)         snippet = snippet.replace("***", word, 1)     # fake parameter lists     for word in param_names:         result = result.replace("@@@", word, 1)         snippet = snippet.replace("@@@", word, 1)     results.append(snippet)     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" # 在命令列裡邊執行 (ex41.py所在的目錄)> python ex41.py  class Cellar(object):     def corn(self, control, distance) (程式碼裡raw_input的提示符,需要使用者輸入)>class Cellar has-a function... ANSWER:   class Cellar has-a function named corn that takes self and control, distance parameters. beetle.crate = 'cow' >(不想練習了,就Ctrl + c 結束)

練習從語言到程式碼

#反過來練習,加上english引數執行指令碼 > python ex41.py english From committee get the carriage function, and call it with parameters self, bottle. > committee.carriage(self, bottle) ANSWER:    committee.carriage(bottle) From dirt get the cry attribute and set it to 'ant'. >

閱讀更多程式碼

找更多程式碼,用上面習題用到的詞彙來閱讀。要找到所有帶類的檔案,按下列步驟完成: 1) 針對每一個類,指出其名稱,及它是繼承於哪個類。 2) 列出每個類中的所有函式,及這些函式的引數。 3) 列出類中用在self上的所有屬性。 4) 針對每一個屬性,指出它來自哪個類。