1. 程式人生 > >面向物件,請珍惜我們的地球。珍惜我們的環境。在這個宇宙中,很可能真的只有我們——人類在孤獨的生存和奮鬥。

面向物件,請珍惜我們的地球。珍惜我們的環境。在這個宇宙中,很可能真的只有我們——人類在孤獨的生存和奮鬥。

首先,計算機程式是為了解決問題而存在的,那麼怎麼才能更好的解決問題呢?——模仿自然。簡單的模仿就是面向過程。把某個事情的過程寫出來。這種思想的缺點是擴充套件性很差。所以為了解決這個問題,發展出了面向物件的程式設計思想。所謂的面向物件,就是對自然界中事物的模仿,在這個模仿的基礎上去擴充套件。所以自然而然就有了面向物件的一套程式設計理論。把自然界的事物高度抽象出來,作為這一類的事物都具有的特點和能力,那麼,這個抽象就是所謂的類。而根據類做出的具體的事物,就是所謂的物件了。先說類,類就是物件的圖紙。所以,物件應該具有或者說需要具有什麼功能,什麼特點,那麼就在類中寫出這些個特點和功能,但是這些功能和特點都應該屬於具體的某一個物件,所以這些功能和特點就應該用具體的物件來訪問,就是所謂的self。而為了更加合理的模仿大自然,或者為了更加合理的節省記憶體,發揮計算機的效率,給類這個物件也規定了一些特性,以便與更好的為物件服務。讓所有的物件都應該擁有的特性,並且每一個物件這個特行的值都應該是一樣的情況下,就不用每一個物件都去寫了,只要在類中寫明,就可以了,這樣每一個物件都天然有這個同樣值的同一個屬性。這就是類變數。類變數也叫做靜態變數,類變數最好用類去訪問。物件也可以訪問,但不符合規範,不能這麼做。總結,例項變數,給物件用的,用物件訪問,類變數(靜態變數),這個類的所有物件共享的變數,最好用類名來訪問,符合規範。那麼,有了類變數(靜態變數),就一定有靜態方法。宣告靜態方法的語句上面要加一條特定宣告語句:@staticmethod,以便與普通的物件方法做區別。@staticmethod是語法,必須這麼寫。與靜態方法相對的就是例項方法(物件方法)。物件方法就是普通的寫在類中的函式。成員方法(物件方法)必須要傳遞至少一個引數(self),靜態方法不需要傳遞引數。也就是說靜態方法不需要傳遞成員變數。或者說不需要傳遞成員變數的方法就可以用靜態方法。靜態方法和類變數(靜態變數)一樣都要用類名來訪問和呼叫。另一個和靜態方法差不多的就是類方法。類方法在引數列表中第一個引數就是cls,就是呼叫這個方法的類的名字,類方法在之前必須加一句語法@classmethod。面試題: 類⽅方法/靜態⽅方法和例項例⽅方法有什什麼區別?

除了這些,還有一個麻煩——類的成員——屬性。這是一種變種。本身應該是屬性,是靜態的,但是靜態又沒辦法取值,因為它是變化的,例如人這個類的年齡屬性。年齡每年都會變。所有不能寫死,但是每次取值都要計算很麻煩,所以在類中用一種特殊的寫法來實現。前面加上一句@porperty。類的成員——屬性的限制:1,方法(程式碼)引數中只能有一個引數self。2,方法上要寫@porperty。3,呼叫的時候不需要寫括號,相當於不需要執行,相當於作為屬性來直接取值。直接當成屬性變數來用就i可以了。4,這種特殊形式只能取值,不能設定值。總之,很麻煩。再來,就是私有了。私有隻要在變數或屬性前加上雙下劃線就可以了。私有的變數或屬性不能直接訪問,但是可以通過公共的方法來獲取內容。外界只能看不嫩改。私有可以是類變數或靜態變數,也可以是例項變數。方法也可以私有。而且私有最大的特徵就是子類是無法繼承的。以上,很羅嗦。但最常用到的還是最普通的物件方法和物件屬性,還有靜態變數。以及私有。類屬性@porperty感覺也應該常用,最起碼身份類中的年齡就必須用到。我想,所謂面向物件也是一種拙略的模仿吧。只不過當前情況下,這也算是最好的辦法了。大自然是千變萬化的。模仿起來很難很難。生物,大自然是多少百萬年進化而來的。就像科幻小說裡說的,一個外星人學習了地球的全部知識,把這些知識連線成一個無限長的數,再除以一個特定的數,得到一個結果,利用這個結果做一根有限長度的金屬棒,這根金屬棒不隨著時間或任何事物而變化。外星人回到他的星球,只要用棒子的長度乘以那個特定的數就可以得到那個無限長的數,也就得到了地球所有的額知識。哈哈哈哈。腦洞大開啊。但畢竟沒有外星人。就如近些年的理論發現,生命的出現其實絕對是偶然中的偶然。就算宇宙中有無限數量的星系,出現生命的機率也是小的可憐,可以忽略不記。所以,珍惜我們的地球吧。珍惜我們的環境吧。在這個宇宙中,很可能真的只有我們——人類在孤獨的生存和奮鬥。