標籤:生活 nbsp cbe http follow sel 作者 raw 小白
前言:本人是Python初學者。在學到Python的類和對象的時候,被‘高深’的概念虐得死去活來。上網提問,得到的回複幾乎都是‘大神們’藏著掖著迫不得已才擠出來的隻言片語;上網搜文章,長長的篇幅,那些字都認得,但是就是不知道是什麼意思,並且都是反覆地複製粘貼而導致文章排版極其辣眼睛。
一個陰鬱的冬天,我在YouTube上搜到一個視頻作者John Philip Jones,發現一個關於Python類和對象的講解。這是目前為止我看到的最利於小白學習Python的講解方法。由於在國內上YouTube不方便,打算寫個文章把內容搬運過來,同時加入一些自己的學習心得,希望可以為像我一樣小白中的小白提供這些資訊。
著作權作者,再次重複三遍:John Philip Jones, John Philip Jones,John Philip Jones
首先,我已經假定你已經看了無數遍的垃圾文章,然後依然搞不懂類和對象,但是呢起碼知道有類和對象這麼兩個玩意兒。
由於你沒有編程經驗,所以無法從學過的程式設計語言裡通過類比去理解Python的‘類和對象’。咱們用生活中的例子來說說,建房子。
類(class): 相當於施工圖紙(blueprint)
對象(object):房子(已經建造好的)
假設你手上有施工圖紙(Blueprint),裡面有房子的所有資訊(蓋幾層,廚房在哪,臥室在哪,怎麼建)。
你已經在憧憬你以後在這個新家的生活了,買貴的傢具,在廚房做好吃噠........但是呢,這些都是你的YY,你要做這些事情必須要等房子真正建好了以後才行。如果房子中途爛尾,你就啥也做不了,夢想無處安放。
所以說,‘一個建好的房子’很重要。在Python中,‘一切皆為對象’,這也是大家稱之為 object oriented的意思。有了對象,咱們才能搞事情!!!
接著來:
對於建好的房子也許會稍稍不一樣,每個人都有各自的喜好,就像圖中看到的,可能是房子的戶型一樣,但是呢,顏色不一樣。重點:它們都是根據‘施工圖紙’造出來的。
----------------------------------------------------------
例子結束,帶著例子中想表達的‘精神’,咱進入Python來看看‘類和對象’:
用變數賦值來說:a = 2
據說按照咱一般的理解,建立一個變數命名為a,然後賦值2。相當於把2放進名叫a的籃子裡,blablablabla.....
滾粗!讓我們這次從另外一個角度來考慮 a = 2 這個問題,開始:
當你在Python中打出 a = 2, 然後斷行符號。Python中有一個叫 ‘integer class’ 的玩意兒被‘喚醒’。
然後,這個integer class會跟你的要求,在執行區‘建立’一個對象,這個對象是根據integer class的施工圖紙創造的。所以,這個對象(圖中圓圓的東西)會有integer class的特徵或者屬性。(這個過程,就是你看到房子就快建好了)
還記得那個 a = 2裡面的 a 嗎?它要去哪裡?
因為語句,a 是要等於(=)2的,因為你按了斷行符號,哈哈
所以呢...........
a會作為一個標籤,跟這個對象(圓圓的東西)掛鈎。(房間建好了,可以拿鑰匙住進去啦)
------------------------------------------------
臥槽,老王在隔壁也買了房子!?!? 這時,又建立了一個對象(圓圓的東西)
b = 3
老王拿著鑰匙住進去了,b作為標籤就綁在了建立的對象上。
最後再說幾點:
可以看到每次建立對象(圓圓的東西),它們的ID都是不同的。
然鵝..........如果我們把 b = 3 改成 b =2, 咦?我們不是已經有了a = 2了嗎?說好的自掃門前雪呢??
這就意味著隔壁老王的魔爪要伸過來了.....
當改成 b = 2, integer class不會重新創造一個對象。而是把 b(隔壁老王)作為標籤,綁在之前已經建立的那個(a = 2)的對象上。(請看)
最後再說倆句:在Python中,對於 a = 2 而言,不要認為是把數值2放進a的籃子裡!!!!
應該是a作為標籤,掛在對象(數值為2)上!!!!對象很重要!!!!就是圖中那個圓圓的東西!!!!!!對象很重要!!!!
到此為止,僅僅是開了頭。後面還涉及到很多關於類和對象的操作,並且每個對象裡面的那個ID也很重要(涉及到method的引用,還有self的問題)
但是一旦你有了這個思路之後,編寫物件導向程式的時候,簡直是爽,例如:
Python的類和對象 入門級講解(簡單粗暴)