Day11姚明美國造車記
姚明來到美國打球!人生地不熟的首先要解決兩個問題。第一個問題是用什麼方式面對(面向:看、關注、瞅)
美國人和美國的事物(對象:個體、實體、實例、結果)
;第二個問題是用什麼方式來面對美國的運作方式(面向過程:經過、經歷、從頭到尾)
。
第一天來到美國,准備自己做飯,用面向過程的思想來解決吧。(1.考慮今天吃什麼?2.去菜場買菜;3.挑菜(貨比三家、針對性砍價;4.結賬走人;5.摘菜;6.洗菜;7.切菜;8.炒菜;9.焖飯;10.吃飯;11.洗刷)
結果發現這樣太累了,還是用面向對象的方式來解決吧。(1.考慮今天吃什麼?2.去飯店;1).調用服務員的點菜功能 2).將點菜的信息給到廚師; 3).廚師調用服務員的上菜功能; 3.開始吃飯;4.結賬走人(方式很多))
,這樣就方便多啦!同樣,姚明先買個電腦,先去電腦城准備自己組裝一台(面向過程)
,結果發現,同樣太麻煩了,最後還是讓助理給買了一個電腦(面向對象)
。
第一天去休斯頓火箭隊報道,教練問姚明來美國還習慣嗎?有什麼感受啊,請談談你對處理小事和處理大事的理解和看法?姚明巴拉巴拉說了一通。
面向過程: 從頭到尾全部參與(參與者),這程序中的體現主要是定義模塊、定義類、定義函數,
以及定義其它的成員//面向對象: 先不急著去定義任何內容,
找一找有沒有現有的對象存在(找對象、指揮者) .
1.如果有對象,那麼就調用此對象的函數或者屬性完成需求
2.如果沒有對象,那麼先創建對象,然後在調用對象的功能或者屬性完成需求
3.如果沒有對象也沒有類,那麼就先設計類,然後在創建對象,在完成需求)
教練對姚明的回答相當滿意。教練又問姚明,對英語聽得懂嗎?姚明說,聽得懂的!我用名詞動詞提煉法對英語進行分析,並向教練講解了他昨天把一只大象關進冰箱的經過。
把大象裝進冰箱
名詞:大象、冰箱 類型:在python中使用關鍵字class來定義
表現的不清晰、不具體、模糊的
動詞:裝 函數:功能、行為
步驟一:設計類
class 大象
class 冰箱:
開開():
裝進(大象):
關閉():
步驟二:創建對象(實例化對象) 對象:實實在在存在的個體、實體、占用內存的
表現為清晰的、具體的
dx = 大象()
bx = 冰箱()
步驟三:通過對象調用函數或者屬性完成需求
bx.開開()
bx.裝進(dx)
bx.關閉()
教練聽完後哈哈大笑。隨後兩人一起去看了幾集貓和老鼠。
第二天,姚明決定去買輛車。但是他的身形太大了,市面上買不到合適的。姚明決定自己造車。
遇到面向對象的問題,我們可以考慮如下三個環節(初學者)
1).側重於設計類,定義屬性、函數、...(可能需要花費大量的時間) --> 認為是面向過程的體現 。
2).創建對象(簡單,一行代碼搞定,但是內存比較復雜) 。3).通過對象調用屬性或者函數完成需求
他先創建了一個名為大駱駝的車廠(類名起名規范:我們需要遵從駝峰命名(多個單詞組成,每個單詞首字母大寫,其余字母都小寫) 例如:HelloWorld)
,將生產的車型、顏色、大小設定好(屬性:描述一類事物的特征、特點;可以理解為"靜"的部分;在代碼中的體現,就是定義變量)
,又給車安裝了一些功能,比如說自動清洗啊,自動遮陽什麼的(函數:描述一類事物的行為、功能;可以理解為"動"的部分;在代碼中的體現,就是定義函數)
。建造好後趕緊讓車廠生產出一台。不久,車就做好送過來了,姚明一看給氣壞了,這只有車架子,都沒噴漆,貼玻璃啥的(在設計類的時候,如果不顯示的定義構造函數(參數無所謂),那麼編輯器會自動提供了一個默認空參構造;一旦定義了,編輯器就不會再提供了。意思就是說有的類既沒有屬性也沒有構造函數。)
姚明告訴車廠要做一輛紫色的車。不久車做好了,姚明一看,發現自己不喜歡這輛車的紫色,他想改成紅色,於是就自己買了點紅漆給噴上了(動態修改屬性)
。噴好漆後,姚明又給車頭貼了一個五星紅旗圖案(給對象動態添加屬性:(python存在的,很多語言不支持),實例化某個對象成功後,"後天"給其單獨追加一些必要的屬性;以對象名.追加屬性名並且賦值操作 例如:對象名.屬性名 = 值)
。
噴好漆後,姚明還想再多要幾輛車,但是他又不知道要什麼樣式的車。他把想法告訴了車廠,車廠給了他一個大大鐵架子(構造函數:constructor 構造函數/構造方法/構造器)
。並告訴他,沒關系,你想好後把你想要的車的樣式寫到鐵架子上面的板子上(格式:__init__(self):)
,它就會為你生產一輛滿意的車來。但是,它只能用一次(執行時機:在創建對象時被執行 【注意】一個對象只會被執行一次,何時調用由系統自行決定)
。姚明說。那如果我要生產一輛車,用完後就不需要了。咋辦?車廠在車尾處加了一個斧子。說等到車完成了使命,斧子就會把車砍爛回收掉啦。
析構函數:格式:
__del__(self):執行時機:在程序結束前,將對象回收,清出內存 .【注意】由一個對象存在就會被執行一次,何時調用由系統自行決定
哈哈!姚明還有個疑問,就是別人要問我這車是什麼配置啊,我只能說是紅旗牌,中國造的,但其他信息我都不知道啊?這怎麼辦?車廠給了姚明一個名片,把它放在車的標下面。並告訴姚明你可以把車的詳細信息寫在名片上,如果有人問你車的信息,你就直接把車標升起來,讓他看小名片!
__str__(self)函數:
作用:對象實例化之後將數據給到對象名,此時如果打印對象名,在控制台上我們看到的是整個對象的類型以及在內存中的地址(十六進制),但是我們在開發過程中,對於類型和地址並不關注;我們更希望看到的是對象的各個屬性內容, 此時我們可以自己重新定義__str__(self)函數的函數體(就是函數重寫), 此函數有返回值,return後面的內容必須是str類型, def __str__(self):
return '姓名為:%s,年齡為:%d,籍貫是:%s人' %(self.name,self.age,self.address)
執行時機:
在打印對象名/引用名時被觸發,由系統決定何時調用
姚明說你們這些功能太強大了,我都沒見過這些部件,它們就能實現我的目的。車廠告訴姚明這些制造部件叫魔術零件,
__開頭並且__結尾的函數,我們稱為魔術函數;
特點:
調用執行都不需要程序員關注,系統自行決定
例如:
__init__、__del__、__str__
它們都是我們的汽車加工技術微型化的縮影!姚明鼓起掌來!棒棒哒!