python類的介紹

hiekay發表於2018-12-26

關於類的基本認識

術語解釋,均來自維基百科。

1、問題空間

問題空間是問題解決者對一個問題所達到的全部認識狀態,它是由問題解決者利用問題所包含的資訊和已貯存的資訊主動地構成的。

一個問題一般有下面三個方面來定義:

  • 初始狀態——一開始時的不完全的資訊或令人不滿意的狀況;
  • 目標狀態——你希望獲得的資訊或狀態;
  • 操作——為了從初始狀態邁向目標狀態,你可能採取的步驟。

這三個部分加在一起定義了問題空間(problem space)。

2、物件

物件(object),臺灣譯作物件,是物件導向(Object Oriented)中的術語,既表示客觀世界問題空間(Namespace)中的某個具體的事物,又表示軟體系統解空間中的基本元素。

物件這個屬於,比較抽象。因此,有人認為,將object翻譯為“物件”,常常讓人迷茫,不如翻譯為“物件”更好。因為“物件”讓人感到一種具體的東西,而所謂物件,就是指那種具體的東西。

這種看法在某些語言中是非常適合的。但是,在Python中,則無所謂,不管怎樣,python中的一切都是物件,不管是字串、函式、模組還是類,都是物件。“萬物皆物件”。

都是物件有什麼優勢嗎?太有了。這說明python天生就是OOP的。也說明,python中的所有東西,都能夠進行拼湊組合應用,因為物件就是可以拼湊組合應用的。

對於物件這個東西,OOP大師Grandy Booch的定義,應該是權威的,相關定義的內容包括:

  • 物件:一個物件有自己的狀態、行為和唯一的標識;所有相同型別的物件所具有的結構和行為在他們共同的類中被定義。
  • 狀態(state):包括這個物件已有的屬性(通常是類裡面已經定義好的)在加上物件具有的當前屬性值(這些屬性往往是動態的)
  • 行為(behavior):是指一個物件如何影響外界及被外界影響,表現為物件自身狀態的改變和資訊的傳遞。
  • 標識(identity):是指一個物件所具有的區別於所有其它物件的屬性。(本質上指記憶體中所建立的物件的地址)

3、物件導向

物件導向程式設計(英語:Object-oriented programming,縮寫:OOP)是一種程式設計範型,同時也是一種程式開發的方法。物件指的是類的例項。它將物件作為程式的基本單元,將程式和資料封裝其中,以提高軟體的重用性、靈活性和擴充套件性。

物件導向程式設計可以看作一種在程式中包含各種獨立而又互相呼叫的物件的思想,這與傳統的思想剛好相反:傳統的程式設計主張將程式看作一系列函式的集合,或者直接就是一系列對電腦下達的指令。物件導向程式設計中的每一個物件都應該能夠接受資料、處理資料並將資料傳達給其它物件,因此它們都可以被看作一個小型的“機器”,即物件。

目前已經被證實的是,物件導向程式設計推廣了程式的靈活性和可維護性,並且在大型專案設計中廣為應用。 此外,支持者聲稱物件導向程式設計要比以往的做法更加便於學習,因為它能夠讓人們更簡單地設計並維護程式,使得程式更加便於分析、設計、理解。反對者在某些領域對此予以否認。

當我們提到物件導向的時候,它不僅指一種程式設計方法。它更多意義上是一種程式開發方式。在這一方面,我們必須瞭解更多關於物件導向系統分析和麵向物件設計(Object Oriented Design,簡稱OOD)方面的知識。

維基百科中這樣定義了類:

在物件導向程式設計,類(class)是一種物件導向計算機程式語言的構造,是建立物件的藍圖,描述了所建立的物件共同的屬性和方法。

類的更嚴格的定義是由某種特定的後設資料所組成的內聚的包。它描述了一些物件的行為規則,而這些物件就被稱為該類的例項。類有介面和結構。介面描述瞭如何通過方法與類及其例項互操作,而結構描述了一個例項中資料如何劃分為多個屬性。類是與某個層的物件的最具體的型別。類還可以有執行時表示形式(元物件),它為操作與類相關的後設資料提供了執行時支援。

支援類的程式語言在支援與類相關的各種特性方面都多多少少有一些微妙的差異。大多數都支援不同形式的類繼承。許多語言還支援提供封裝性的特性,比如訪問修飾符。類的出現,為物件導向程式設計的三個最重要的特性(封裝性,繼承性,多型性),提供了實現的手段。

看到這裡,或許有一個認識,要OOP程式設計,就得用到類。可以這麼說,雖然不是很嚴格。但是,反過來就不能說了。不是說用了類就一定是OOP。

編寫類

對類的理解,需要有一定的抽象思維。因為類(Class)本身所定義的是某事物的抽象特點。例如定義一個類:

class Human:        #這是定義類的方法,通常類的名稱用首字母大寫的單詞或者單詞拼接
    pass

好,現在就從這裡開始,編寫一個類,不過這次我們暫時不用python,而是用虛擬碼,當然,這個程式碼跟python相去甚遠。如下:

class Human:
    四肢
    性格
    愛好
    學習()

物件(Object)是類的例項。剛才已經定義了一個名字為Human的類,從而定義了世界上所有的Human,但是這是一個抽象的Human,不是具體某個人。而對一個具體的人,他的四肢特點、性格、愛好等都是具體的,這些東西在這裡被稱之為屬性。

下面就找一個具體的人:張三,把上面的類例項化。

張三 = Human()
張三.四肢 = 修長
張三.愛好 = 看MM

在這裡,張三就是Human這個類的一個例項。一個具體物件屬性的值被稱作它的“狀態”。(系統給物件分配記憶體空間,而不會給類分配記憶體空間,這很好理解,類是抽象的系統不可能給抽象的東西分配空間,物件是具體的)


相關文章