1. 程式人生 > >笨方法學Python—習題40:模組、類和物件

笨方法學Python—習題40:模組、類和物件

Python是一種面向物件biancheng(OPP)語言。即,Python中有一種叫做類(class)的結構,通過它可用一種特殊的方式構造軟體。

模組和字典差不多

字典:一種將一個東西對應到另外一個的方式— 若有一個字典,其有一個叫‘apple’的鍵,想獲取值就需要: mystuff = {'apple': "I AM APPLES!"}     print mystuff['apple']                     #字典獲取值的方式 模組:1)包含函式和變數的Python檔案;2)可以匯入這個檔案;3)匯入後就可使用.操作符訪問其中的函式和變數 假設已有一個名為mystuff.py的模組,且裡邊有一個叫apple的函式和一個叫tangerine的變數: # this goes in mystuff.py
def apple():     print "I AM APPLES!" # this is just a variable tangerine = "Living reflection of a dream" 可以用import來呼叫這個模組,並且訪問函式apple和變數tangerine ### 如果mystuff.py沒有存放在Python預設的目錄(尋找模組的地方),就需要告訴直譯器去哪裡找       import sys, pprint              pprint.pprint(sys.path)     # 可以檢視直譯器預設的路徑,你可以將你的模組放在site_packages目錄下(最佳)
           sys.path.append('模組所在目錄')  #還可以告訴直譯器除了預設目錄,還要去這個目錄下檢視                                                                                                                     (C:\Users\Administrator\Canopy\licenses)### import mystuff mystuff.apple() print mystuff.tangerine ###若模組中內容修改了,需要重新匯入:
       mystuff = reload(mystuff)### 可發現字典和模組使用方式有點類似,只是語法不同([鍵]和.鍵): Python裡一個通用模式:1)類似“鍵=值”風格的容器;2)通過“鍵”的名稱獲取其中的值

類和模組差不多

Python中的程式碼結構可實現上述通用模式:通過類可將一組函式和資料放到一個容器中,從而用.操作符訪問它們。 # 建立mystuff類 class MyStuff(object):     def __init__(self):         self.tangerine = "And now a thousand years between"     def apple(self):         print "I AM CLASSY APPLES!" 使用類而非模組的原因:其重複建立很多出來(類可以多次例項化),這些例項之間也不會相互干涉;而模組一次匯入之後,整個程式中只有這麼一份內容

物件相當於迷你匯入

類似於模組import的匯入操作,類的稱為“例項化”—即建立。當將一個類“例項化”之後,就得到了一個物件(object) 實現例項化的方法:像呼叫函式一樣呼叫一個類 thing = MyStuff()    # thing就是MyStuff類例項化後的一個物件 thing.apple() print thing.tangerine ###還可以繼續例項化:         a = MyStuff()   #a是MyStuff類例項化後的一個物件         b = MyStuff()   #b也是MyStuff類例項化後的一個物件         a, b同樣可以呼叫apple()函式和tangerine屬性,a, b, thing之間無影響### 第一行程式碼就是例項化操作,和呼叫函式類似。但是Python其實在背後做了一系列的工作(迷你匯入過程): 1) Python看到MyStuff()並且知道了它是你定義過的一個類 2) Python建立了一個空物件,裡邊包含了你在該類中用def建立的所有函式 3) 然後Python回去檢查你是否在裡邊建立了一個__init__函式,若建立了,它就會呼叫這個函式,對你新建立的物件實現了初始化 4) 在MyStuff的__init__函式裡,有一個多餘的函式叫做self,它就是Python建立的空物件,我們可對其進行類似模組、字典等的操作,為它設定一些變數進去 5) 上面將self.tangerine設成了一段歌詞,這樣我就初始化了該物件 6) 最後,Python將這個新建的物件賦給一個叫thing的變數,以供後面使用 此過程並不是拿來一個類直接就用,而是將類作為一個“藍圖”,然後用它建立和這個類有相同屬性的副本。 但本質上,類和物件與模組是完全不同的東西: 1. 類是像一種藍圖或者預定義的東西,通過它可以建立新的迷你模組 2. 例項化的過程相當於你建立了這麼一個迷你模組,同時匯入了它 3. 結果建立的迷你模組就是一個物件,你可以將它賦予給一個變數並進行後續操作。

獲取某樣東西里包含的東西

現有三種方法: # dict style mystuff['apple'] # module style mystuff.apples() print mystuff.tangerine # class style thing = MyStuff() thing.apples() print thing.tangerine

第一個關於類的例子

class Song(object):     def __init__(self, lyrics):         self.lyrics = lyrics     def sing_me_a_song(self):         for s in self.lyrics:             print s happy_bday = Song(["Happy birthday to you",                                    "I don't want to get sued",                                    "So I'll stop right there"]) bulls_on_parade = Song(["They rally around the family",                                          "With pockets full of shells"]) happy_bday.sing_me_a_song() bulls_on_parade.sing_me_a_song()

應該看到的結果

$ python ex40.py Happy birthday to you I don't want to get sued So I'll stop right there They rally around the family With pockets full of shells

附加練習

1. 使用這種方式寫更多歌進去,確定弄懂了傳入的歌詞是一個字串列表 2. 將歌詞放到另一個變數中,然後在類中使用這個新定義的變數 3. 試著能不能給它加一些新功能,just do it  弄壞了也沒事 4. 網上搜索“object oriented programming”(面向物件程式設計),給自己洗洗腦

常見問題回答

為什麼建立__init__或者別的類函式時需多加一個self變數? 若不加self,那類中的cheese = 'Frank'這樣的程式碼意義就不明確了,它既可能指例項的cheese屬性,又可能是一個叫做cheese的區域性變數。而有了self.cheese = 'Frank'就可清楚知道是指例項的屬性self.cheese

相關推薦

法學Python習題40模組物件

Python是一種面向物件biancheng(OPP)語言。即,Python中有一種叫做類(class)的結構,通過它可用一種特殊的方式構造軟體。 模組和字典差不多 字典:一種將一個東西對應到另外一個的方式— 若有一個字典,其有一個叫‘apple’的鍵,想獲取值就需要: m

法學Python——習題40

around family 方法學 列表 init happy 編程 () pocket 之前例子講過關於字典、列表、字符串、元組,按書中所述,其實這些已經足夠寫一些代碼,但Python屬於面向對象的編程語言,本節所講的類,是必須要掌握的,雖然現在有些懵逼 1 clas

法學Python 習題40:字典,可愛的字典

題目 聽聞坊間流傳,python 中的字典(dict)是不不少人喜愛的一種基礎資料型別。相比列表(list)雖然同樣是可變的容器型基礎資料型別,但是字典在

法學Python習題41學習面向物件術語

單詞練習(術語學習) 1. 類(class):            告訴Python建立新型別的東西。 2. 物件(object):           兩個意思,最基本的東西(變數、語句等等),或者某個東西的例項。 3. 例項(instance):       是讓Py

法學python 習題24

該節程式碼如下 print "Let's practice everything." print 'you\'d need to konw \'bout escape with \\ that do \n newlines and \t tabs.' p

法學python 習題32

在這個習題中,作者主要是想讓我們熟悉一下列表操作,在這裡我已經在程式碼中加入了自己的理解。 the_count = [1, 2, 3, 4, 5] #定義列表,如果

法學Python 習題31

print("You enter a dark room with two doors. Do you go through door #1 or door #2?") door = input("> ") if door == "1": pr

法學Python習題45—你來製作一個遊戲

你來製作一個遊戲在程式設計過程中,你需要的所有資訊網上都有,只需去搜索就行。這就需要使用正確的單詞進行搜尋,挑選正確的搜尋關鍵字事半功倍。下面將嘗試寫一個大的專案,並讓其執行起來。需求如下:1. 製作一個截然不同的遊戲。2. 使用多個檔案,並使用import呼叫這些檔案。確認

法學Python 習題 43: 來自 Percal 25 號行星的哥頓人(Gothons)

#!usr/bin/python # -*-coding:utf-8-*- import random from urllib import urlopen import sys WORD_URL = "http://learncodethehardway.org/w

法學Python練習46一個專案的骨架

操作環境:Debain ×64 常見liunx命令大全:http://blog.csdn.net/pony_kinght/article/details/78510168 建立骨架內容 ~ $ mkdir -p projects ~ $ cd proj

python 手記4 〖法學python習題19〗

如有意見或其他問題可在下方寫下評論或加QQ:**1693121186 歡迎一起討論技術問題! 程式碼如下: # -*- coding: utf-8 -*- def cheese_and_crac

法學python 習題34(訪問列表元素)習題35(作死小遊戲)

習題34 序數(ordinal有序 number) 沒有第零個的說法 1開始 基數 索引 元素對應的地址(index)cardinal隨機 0開始 沒有看懂關於年份的那個問題,也沒有找到其他人的答案 習題35 這個小遊戲完全是一個花式作死的過程 到處都可以死,然後對使用者輸

法學Python 習題 7: 更多列印

#!usr/bin/python # -*- coding:utf8 -*- print ("Mary had a little lamb.") print ("Its fleece was white as %s." % "snow") print ("And ever

法學Python 習題 35: 分支函式

#!usr/bin/python # -*-coding:utf-8-*- from sys import exit def gold_room(): print("This room is full of gold. How much do you take?")

法學Python 習題 41: 物以類聚

#!usr/bin/python # -*-coding:utf-8-*- class TheThing(object): def __init__(self): self.number = 0 def some_function(se

法學Python 習題 38: 列表的操作

#!usr/bin/python # -*-coding:utf-8-*- states = { "Oregon":"OR", "Floriad":"FL", "California":"CA", "New York":"NY", "Michigan":"MI"

法學Python 習題 13: 引數解包變數

from sys import argv script, first, second, third = argv print ("The script is called:", script) print ("Your first variable is:", firs

法學Python習題 45: 物件以及從屬關係

程式碼1: ## Animal is-a object (yes, sort of confusing) look at the extra credit class Animal(object): pass ## Dog is-a class

法學python習題52——建立web遊戲

建立web遊戲在這個習題中,我們不會建立一個完整的遊戲,相反,我們會為習題42中的遊戲建立一個“引擎”(engine),讓這個遊戲能夠在瀏覽器中執行起來。這會涉及重構習題42中的遊戲,混合習題47中的結構,新增自動測試程式碼,最後建立一個可以執行這個遊戲的web引擎。這是一個

python3940 模組物件

#create a mapping of state to abbrevuationstates = { 'Oregon': 'OR', 'Florida': 'FL', 'California': 'CA', 'New York': 'NY', 'Michigan': 'M