python 继承的规则
本文講述python繼承規(guī)則。
先來看一些概念:
面向?qū)ο蟮母拍?br /> 簡單地說 面向?qū)ο缶幊?#xff08;Object Oriented Programming)簡稱OOP 就是使我們分析、設(shè)計(jì) 和實(shí)現(xiàn)一個(gè)系統(tǒng)的方法盡可能地接近我們認(rèn)識一個(gè)系統(tǒng)的方法。
1、描述對象之間的相互作用 。
2、面向?qū)ο蟮姆椒ò?#xff0c;面向?qū)ο蟮姆治?#xff08;OOA, Object-Oriented Analysis) 、
面向?qū)ο蟮脑O(shè)計(jì)(OOD, Object-Oriented Design)、面向?qū)ο蟮某绦蛟O(shè)計(jì)(OOP, Object-Oriented Program) 。
3、面向?qū)ο蠹夹g(shù)主要圍繞以下幾個(gè)概念,對象、抽象數(shù)據(jù)類型、類、類型層次(子類)、繼承性、多態(tài)性。
對比:
面向過程
過程化設(shè)計(jì)先確定算法,再確定數(shù)據(jù)結(jié)構(gòu);面向過程的程序員習(xí)慣于建立數(shù)據(jù)結(jié)構(gòu)存放數(shù) 據(jù)并定義方法(函數(shù))來操作數(shù)據(jù);
面向?qū)ο?br /> 面向?qū)ο缶幊滔却_定數(shù)據(jù)結(jié)構(gòu),再確定算法;而面向?qū)ο蟪绦騿T則構(gòu)造對象模型,將數(shù)據(jù) 與方法組織在一起。
面向?qū)ο蟪绦蛟O(shè)計(jì)方法的優(yōu)點(diǎn) 可重用性 可擴(kuò)展性 可管理性
抽象 :對具體問題(對象)進(jìn)行概括,抽出這一類對象的 公共性質(zhì)并加以描述的過程。要求:先注意問題的本質(zhì)及描述,其次是實(shí)現(xiàn)過程或細(xì)節(jié)。
數(shù)據(jù)抽象—描述某類對象的屬性或狀態(tài)(對象相互區(qū)別的 物理量)
代碼抽象—描述某類對象的共有的行為特征或具有的功 能。
類:是描述對象的“基本原型”,它定義一類對象所能擁有的數(shù) 據(jù)和能完成的操作。
在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,類是程序的基本單元。相似的對象可以歸并到同一個(gè)類中去,就像傳統(tǒng)語言中的 變量與類型關(guān)系一樣。
從程序設(shè)計(jì)的角度看,類是面向?qū)ο蟪绦蛑凶罨镜某绦騿卧?#xff0c;類實(shí)質(zhì)上定義的是一種數(shù) 據(jù)類型,這種數(shù)據(jù)類型就是對象類型,我們可以使用類名稱來聲明對象變量。
對象 :它是具有該類類型的一個(gè)特定的個(gè)體,是類的一個(gè) 變量。
對象的構(gòu)造過程 :1.為對象開辟空間; 2.調(diào)用構(gòu)造方法初始化; 3.返回對象的引用。
類是對象的模板,同一個(gè)類可以創(chuàng)建多個(gè)對象,每個(gè)對象 有各自的內(nèi)存空間,不會(huì)互相影響
默認(rèn)情況下,Python中的成員函數(shù)和成員變量都是公開的(public),在python中沒有類似public,private等關(guān)鍵詞來修 飾成員函數(shù)和成員變量。
在python中定義私有變量只需要在變量名或函數(shù)名前加 上 ”__“兩個(gè)下劃線,那么這個(gè)函數(shù)或變量就是私有的了。
1、_xxx "單下劃線 " 開始的成員變量叫做保護(hù)變量,意思是只有類實(shí)例和子類實(shí)例能訪問到這些變量。
2、__xxx 類中的私有變量/方法名 (Python的函數(shù) 也是對象,所以成員方法稱為成員變量也行得通。), " 雙下劃線 " 開始的是私有成員,意思是只有類對象自己 能訪問,連子類對象也不能訪問到這個(gè)數(shù)據(jù)。
3、)__xxx__ 系統(tǒng)定義名字,前后均有一個(gè)“雙下劃線” 代表python里特殊方法專用的標(biāo)識,如 __init__()代表 類的構(gòu)造函數(shù)。
封裝:行為和屬性的結(jié)合。
含義:提供將所抽象出的問題的屬性(數(shù)據(jù)成員)和行為 (代碼成員)相組合的一種機(jī)制,它能將這二類成員再組 合在一起,形成對象或?qū)嶓w。
目的:增強(qiáng)使用的安全性,使用者不必了解具體的實(shí)現(xiàn)細(xì) 節(jié),而只需要通過設(shè)計(jì)者提供的外部接口來操作它。 優(yōu)點(diǎn):實(shí)現(xiàn)高度模塊化,從而產(chǎn)生出軟件構(gòu)件(控件); 利用控件快速地組裝程序。 客戶可以調(diào)用一個(gè)并不了解內(nèi)部機(jī)制的對象的方法 任何關(guān)于內(nèi)部的改動(dòng)對客戶來說都是隱藏的。
繼承:繼承是由已有的類創(chuàng)建新類的機(jī)制。由繼承得到的類稱為子類(派生類),被繼承的類稱為父類 (超類)(基類)。
繼承的原則 :
1、子類繼承父類的成員變量和成員方法
2、子類不繼承父類的構(gòu)造方法,能夠繼承父類的析構(gòu)方法
3、子類不能刪除父類的成員,但可以重定義父類成員
4、子類可以增加自己的成員
繼承的作用 :
1、實(shí)現(xiàn)軟件可重用的重要方式
2、增強(qiáng)軟件可擴(kuò)充性
3、提高軟件的可維護(hù)性
面向?qū)ο笾械膬蓚€(gè)重要概念:抽象和分類。
抽象和分類是人們認(rèn)識世界的基本方法:
抽象是將現(xiàn)實(shí)世界中客觀存在的事務(wù)映射到意識中的一種 方法。
分類是指確定這些抽象到意識中的概念之間的關(guān)系。
這些關(guān)系的基本形式包括一般到特殊和整體與局部。
在面向?qū)ο笾?#xff0c;一般到特殊的關(guān)系用繼承(Inheritance)表 示;整體與局部的關(guān)系用組合(composition)表示。(在之前的博客中也將到這個(gè)問題)
Super()用法 :
1、super()用來引用當(dāng)前對象的父類,用super()可以實(shí)現(xiàn)對 父類成員的訪問。
訪問父類被隱藏的成員變量,如: super().variable
2、調(diào)用父類中被覆蓋的方法,如: super().Method([paramlist])
3、調(diào)用父類的構(gòu)造函數(shù),如: super().__init__([paramlist])
多態(tài) :
一個(gè)對象在不同的情況下,具有不同的形態(tài),用于強(qiáng)類型語言。是使用在繼承和接口中實(shí)現(xiàn)。
多態(tài):定義時(shí)的類型和運(yùn)行時(shí)的類型不一樣,此時(shí)就成為多態(tài)
python中的多態(tài)主要得益于python的鴨子類型,之前的博客中講過,這里不再多說。
多態(tài)的作用: 提高程序的擴(kuò)展性
實(shí)例屬性,類屬性/方法,靜態(tài)方法 :
類屬性 :直接在類中定義的,與方法平齊,不在方法里的屬性就是類屬性
實(shí)例屬性 :在方法里通過self.屬性都是實(shí)例屬性 。
類屬性就是類對象所擁有的屬性,它被所有類對象的實(shí)例對象所共有,在內(nèi)存中只存在一個(gè)副本,這個(gè)和C++中類的靜態(tài)成員變量有點(diǎn)類似。
對于公有的類屬性,在類外可以通過類對象和實(shí)例對象訪 問。
類方法 :是類對象所擁有的方法,需要用修飾器@classmethod。
(注解、元數(shù)據(jù))來標(biāo)識其為類方法,對于類方法,第一 個(gè)參數(shù)必須是類對象,一般以cls作為第一個(gè)參數(shù)(當(dāng)然可 以用其他名稱的變量作為其第一個(gè)參數(shù),但是大部分人都 習(xí)慣以’cls‘作為第一個(gè)參數(shù)的名字,就最好用’cls'了),能 夠通過實(shí)例對象和類對象去訪問。
靜態(tài)方法 :
需要通過修飾器@staticmethod來進(jìn)行修飾,靜態(tài)方法不 需要多定義參數(shù)。
從類方法和實(shí)例方法以及靜態(tài)方法的定義形式就可以看出 來, 類方法的第一個(gè)參數(shù)是類對象cls,那么通過cls引用的必定 是類對象的屬性和方法;
而實(shí)例方法的第一個(gè)參數(shù)是實(shí)例對象self,那么通過self引 用的可能是類屬性、也有可能是實(shí)例屬性(這個(gè)需要具體 分析),不過在存在相同名稱的類屬性和實(shí)例屬性的情況 下,實(shí)例屬性優(yōu)先級更高。
靜態(tài)方法中不需要額外定義參數(shù),因此在靜態(tài)方法中引用 類屬性的話,必須通過類對象來引用。
總結(jié) :
方法是代碼重用的重要手段,控制好代碼被訪問的程度 可以加強(qiáng)代碼的安全性, 封裝、繼承和多態(tài)是面向?qū)ο蟮幕咎卣?,封裝特性通過訪問權(quán)限的設(shè)定將類的實(shí)現(xiàn)細(xì)節(jié)隱藏,提供 接口供外部訪問 ,繼承和組合是類間的基本關(guān)系,是軟件復(fù)用的重要方法 ,多態(tài)是面向?qū)ο蟮闹匾獦?biāo)志。
————————————————
版權(quán)聲明:本文為CSDN博主「MZP_man」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/MZP_man/article/details/100029713
總結(jié)
以上是生活随笔為你收集整理的python 继承的规则的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python之继承
- 下一篇: win7 easybcd 安装cento