Python學(xué)習(xí)之路-面向?qū)ο?三個(gè)基本特征
三個(gè)基本特征
- 封裝:根據(jù)職責(zé)將屬性和方法封裝到一個(gè)抽象的類中
- 繼承:實(shí)現(xiàn)代碼的重用,相同的代碼不需要重復(fù)的編寫(xiě)
- 多態(tài):不同的對(duì)象調(diào)用相同的方法,產(chǎn)生不同的執(zhí)行結(jié)果,增加代碼的靈活度
封裝
封裝是面向?qū)ο缶幊痰囊淮筇攸c(diǎn),面向?qū)ο缶幊痰牡谝徊骄褪菍傩院头椒ǚ庋b到一個(gè)抽象的類中,外界使用類創(chuàng)建對(duì)象,然后讓對(duì)象調(diào)用方法,對(duì)象方法的細(xì)節(jié)都被封裝在類的內(nèi)部。
{{< admonition tip “提示” true >}}
一個(gè)對(duì)象的屬性可以是另外一個(gè)類創(chuàng)建的對(duì)象
{{< /admonition >}}文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-788022.html
繼承
單繼承
概念
子類擁有父類的所有方法和屬性
語(yǔ)法
class 類名(父類名):
pass
{{< admonition tip “提示” true >}}
子類繼承自父類,可以直接享受父類中已經(jīng)封裝好的方法,不需要再次開(kāi)發(fā).子類中應(yīng)該根據(jù)職責(zé),封裝子類特有的屬性和方法
{{< /admonition >}}
傳遞性
子類擁有父類以及父類的父類中封裝的所有屬性和方法,例:C
類從 B
類繼承,B
類又從 A
類繼承,那么 C
類就具有 B
類和 A
類的所有屬性和方法
重寫(xiě)
子類擁有父類的所有方法和屬性,子類繼承自父類,可以直接享受父類中已經(jīng)封裝好的方法,不需要再次開(kāi)發(fā),當(dāng)父類的方法實(shí)現(xiàn)不能滿足子類需求時(shí),可以對(duì)方法進(jìn)行重寫(xiě)(override)。重寫(xiě)父類方法有兩種情況:
-
覆蓋父類的方法:如果在開(kāi)發(fā)中,父類的方法實(shí)現(xiàn)和子類的方法實(shí)現(xiàn)完全不同,就可以使用覆蓋的方式,在子類中重新編寫(xiě)父類的方法實(shí)現(xiàn)。具體的實(shí)現(xiàn)方式,就相當(dāng)于在子類中定義了一個(gè)和父類同名的方法并且實(shí)現(xiàn),重寫(xiě)之后在運(yùn)行時(shí),只會(huì)調(diào)用子類中重寫(xiě)的方法,而不再會(huì)調(diào)用父類封裝的方法
-
對(duì)父類方法進(jìn)行擴(kuò)展:子類的方法實(shí)現(xiàn)中包含父類的方法實(shí)現(xiàn)父類原本封裝的方法實(shí)現(xiàn)是子類方法的一部分就可以使用擴(kuò)展的方式。在子類中重寫(xiě)父類的方法在需要的位置使用
super().父類方法
來(lái)調(diào)用父類方法的執(zhí)行代碼其他的位置針對(duì)子類的需求,編寫(xiě)子類特有的代碼實(shí)現(xiàn)
{{< admonition tip “提示” true >}}
關(guān)于 super
:在 Python
中 super
是一個(gè)特殊的類。super()
就是使用 super
類創(chuàng)建出來(lái)的對(duì)象,最常使用的場(chǎng)景就是在重寫(xiě)父類方法時(shí),調(diào)用在父類中封裝的方法實(shí)現(xiàn)。
{{< /admonition >}}
{{< admonition tip “提示” true >}}
在開(kāi)發(fā)時(shí),父類名
和 super()
兩種方式不要混用,如果使用當(dāng)前子類名調(diào)用方法,會(huì)形成遞歸調(diào)用,出現(xiàn)死循環(huán)。
{{< /admonition >}}
私有屬性和私有方法
私有屬性、方法是對(duì)象的隱私,不對(duì)外公開(kāi),外界以及子類都不能直接訪問(wèn)。私有屬性、方法通常用于做一些內(nèi)部的事情。
子類對(duì)象不能在自己的方法內(nèi)部,直接訪問(wèn) 父類的私有屬性或私有方法。子類對(duì)象可以通過(guò)父類的公有方法間接訪問(wèn)到私有屬性或私有方法
多繼承
概念
子類可以擁有多個(gè)父類,并且具有所有父類的 屬性和方法。
語(yǔ)法
class 子類名(父類名1, 父類名2...)
pass
{{< admonition warning “注意事項(xiàng)” true >}}
如果父類之間存在同名的屬性或者方法,應(yīng)該盡量避免使用多繼承。
{{< /admonition >}}
{{< admonition note “補(bǔ)充” true >}}
-
super().__init__
相對(duì)于類名.__init__
,在單繼承上用法基本無(wú)差 - 但在多繼承上有區(qū)別,
super
方法能保證每個(gè)父類的方法只會(huì)執(zhí)行一次,而使用類名的方法會(huì)導(dǎo)致方法被執(zhí)行多次,具體看前面的輸出結(jié)果 - 多繼承時(shí),使用
super
方法,對(duì)父類的傳參數(shù),應(yīng)該是由于Python
中super
的算法導(dǎo)致的原因,必須把參數(shù)全部傳遞,否則會(huì)報(bào)錯(cuò) - 單繼承時(shí),使用
super
方法,則不能全部傳遞,只能傳父類方法所需的參數(shù),否則會(huì)報(bào)錯(cuò) - 多繼承時(shí),相對(duì)于使用
類名.__init__
方法,要把每個(gè)父類全部寫(xiě)一遍, 而使用super
方法,只需寫(xiě)一句話便執(zhí)行了全部父類的方法,這也是為何多繼承需要全部傳參的一個(gè)原因
{{< /admonition >}}
了解
新式類:以 object
為基類的類,推薦使用
舊式類:不以 object
為基類的類,不推薦使用
在 Python 3.x
中定義類時(shí),如果沒(méi)有指定父類,會(huì)默認(rèn)使用 object
作為該類的基類 —— Python 3.x
中定義的類都是新式類
{{< admonition tip “提示” true >}}
object
是 Python
為所有對(duì)象提供的基類,提供有一些內(nèi)置的屬性和方法,可以使用 dir
函數(shù)查看。
今后在定義類時(shí),如果沒(méi)有父類,建議統(tǒng)一繼承自 object
{{< /admonition >}}
多態(tài)
多態(tài)不同的子類對(duì)象調(diào)用相同的父類方法,產(chǎn)生不同的執(zhí)行結(jié)果。多態(tài)可以增加代碼的靈活度,以繼承和重寫(xiě)父類方法為前提,是調(diào)用方法的技巧,不會(huì)影響到類的內(nèi)部設(shè)計(jì)。
{{< admonition tip “提示” true >}}
多態(tài)更容易編寫(xiě)出出通用的代碼,做出通用的編程,以適應(yīng)需求的不斷變化!文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-788022.html
{{< /admonition >}}
到了這里,關(guān)于Python學(xué)習(xí)之路-面向?qū)ο?三個(gè)基本特征的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!