python類的介紹
關於類的基本認識
術語解釋,均來自維基百科。
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這個類的一個例項。一個具體物件屬性的值被稱作它的“狀態”。(系統給物件分配記憶體空間,而不會給類分配記憶體空間,這很好理解,類是抽象的系統不可能給抽象的東西分配空間,物件是具體的)
相關文章
- python中類物件及類屬性的介紹Python物件
- 詳細介紹Python類的繼承與多型Python繼承多型
- Windows Forms 的AxHost 類介紹WindowsORM
- Windows Forms 的CacheVirtualItemsEventArgs 類介紹WindowsORM
- java集合類介紹Java
- TypeScript class 類介紹TypeScript
- QTime類介紹QT
- 介紹幾個好用的工具類
- Windows Forms 的Binding 類介紹WindowsORM
- 『python入門:』 python的介紹Python
- java之Object類介紹JavaObject
- python等待方式的介紹Python
- 介紹Python的 迴圈Python
- Python前景介紹Python
- Python Twisted 介紹Python
- Python字典介紹Python
- Python模組介紹Python
- Python Virtualenv 介紹Python
- Python 框架介紹Python框架
- Enterprise JavaBeans 介紹(一):EJB 種類介紹 (轉)JavaBean
- Google guava工具類的介紹和使用GoGuava
- UML類圖介紹&類的六大關係
- Python直譯器種類以及特點?詳細介紹!Python
- C#各類集合介紹C#
- http代理使用分類介紹HTTP
- C#容器類,效能介紹C#
- Regex 類介紹 (C#)C#
- JB的Python之旅-yaml介紹PythonYAML
- 介紹巢狀類和內部類(轉)巢狀
- Python簡單介紹Python
- python描述器介紹Python
- python BeautifulSoup用法介紹Python
- Python BaseHTTPServer 介紹PythonHTTPServer
- Java中的13個原子操作類介紹Java
- HanLP分類模組的分詞器介紹HanLP分詞
- System.Data 的Constraint 類介紹AI
- pyhanlp 文字聚類詳細介紹HanLP聚類
- python中的裝飾器介紹Python