Python面向?qū)ο缶幊倘腴T指南
在計算機編程的世界里,編程技術(shù)已經(jīng)從簡單的流程控制指令序列進化為更有組織的方式。首先是結(jié)構(gòu)化的過程性編程,它可以讓我們將程序劃分為邏輯塊以便于重用或復用。然而,面向?qū)ο缶幊虅t進一步增強了結(jié)構(gòu)化編程,實
在計算機編程的世界里,編程技術(shù)已經(jīng)從簡單的流程控制指令序列進化為更有組織的方式。首先是結(jié)構(gòu)化的過程性編程,它可以讓我們將程序劃分為邏輯塊以便于重用或復用。然而,面向?qū)ο缶幊虅t進一步增強了結(jié)構(gòu)化編程,實現(xiàn)了數(shù)據(jù)和動作的融合,將數(shù)據(jù)層和邏輯層描述成一個可以創(chuàng)建這些對象的簡單抽象層。下面我們將詳細介紹面向?qū)ο缶幊痰膶傩院蛣?chuàng)建過程。
常用術(shù)語
首先,讓我們來了解一下面向?qū)ο缶幊痰某S眯g(shù)語:
1. 抽象/實現(xiàn):抽象指的是對現(xiàn)實世界問題和實體的本質(zhì)表現(xiàn)、行為和特征建模,建立一個相關(guān)的子集,可以用于描繪程序結(jié)構(gòu),從而實現(xiàn)這種模型。
2. 封裝/接口:封裝描述了對數(shù)據(jù)/信息進行隱藏的觀念,它對數(shù)據(jù)屬性提供接口和訪問函數(shù),在設計時對數(shù)據(jù)提供相應的接口就可以了。
3. 合成:合成擴充了對類的描述,使得多個不同的類合成為一個大的類,來解決現(xiàn)實問題。
4. 派生/繼承:派生描述了子類的創(chuàng)建,新類保留已存在類類型中所有需要的數(shù)據(jù)和行為,但允許修改或者其它自定義操作,都不會修改原類的定義。
5. 多態(tài):指出了對象如何通過它們共同的屬性和動作來操作及訪問,而不必考慮它們具體的類。
6. 泛化/特化:泛化表示所有子類與其父類及祖先類有一樣的特點;特化描述所有子類的自定義,也就是什么屬性讓它與祖先類不同。
7. 自省/反射:自省表示給予程序員某種能力來進行像“手工類型檢測”工作,它也被稱為反射。這個性質(zhì)展示了某對象是如何在運行期取得自身信息。
創(chuàng)建類
類是一種數(shù)據(jù)結(jié)構(gòu),我們可以用它來定義對象,對象將數(shù)據(jù)值和行為特性融合到一起。在Python中,使用class關(guān)鍵字來創(chuàng)建類。通常,我們要將類名的第一個字母大寫,以便區(qū)分其他變量和函數(shù)。
數(shù)據(jù)屬性
數(shù)據(jù)屬性僅僅是所定義的類的變量。這種屬性已是靜態(tài)變量,或者是靜態(tài)數(shù)據(jù),它們表示這些數(shù)據(jù)是與它們所屬的類對象綁定的,不依賴于任何類實例。靜態(tài)成員通常僅用來跟蹤與類相關(guān)的值。
創(chuàng)建實例
如果說類是一種數(shù)據(jù)結(jié)構(gòu)定義類型,那么實例則聲明了一個這種類型的變量。類被實例化得到實例,該實例的類型就是這個被實例化的類。創(chuàng)建實例非常類似于調(diào)用函數(shù),調(diào)用一個類就創(chuàng)建了它的一個實例。
實例屬性
實例僅擁有數(shù)據(jù)屬性,數(shù)據(jù)屬性只是與某個類的實例相關(guān)聯(lián)的數(shù)據(jù)值,并且可通過句點屬性標識法來訪問。設置實例的屬性可以在實例創(chuàng)建后任意時間進行,也可以在能夠訪問實例的代碼中進行。
特殊的實例屬性
除了普通的實例屬性之外,Python還提供了幾個特殊的實例屬性:
1. __class__:實例化I的類。
2. __dict__:I的屬性。
類和實例屬性對比
類屬性僅是與類相關(guān)的數(shù)據(jù)值,類屬性和實例無關(guān)。靜態(tài)成員變量不會因為實例而改變它們的值,除非實例中顯示改變它。類和實例都擁有名字空間,各自不相同。