最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python面向?qū)ο笾^承原理與用法案例分析

 更新時(shí)間:2019年12月31日 11:16:10   作者:小飛俠v科比  
這篇文章主要介紹了Python面向?qū)ο笾^承原理與用法,結(jié)合具體案例形式分析了Python面向?qū)ο蟪绦蛟O(shè)計(jì)中繼承的原理、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了Python面向?qū)ο笾^承原理與用法。分享給大家供大家參考,具體如下:

目標(biāo)

單繼承
多繼承

面向?qū)ο笕筇匦?/h2>

封裝 根據(jù) 職責(zé) 將 屬性 和 方法 封裝 到一個(gè)抽象的 類 中
繼承 實(shí)現(xiàn)代碼的重用,相同的代碼不需要重復(fù)的編寫(xiě)
多態(tài) 不同的對(duì)象調(diào)用相同的方法,產(chǎn)生不同的執(zhí)行結(jié)果,增加代碼的靈活度

01. 單繼承

1.1 繼承的概念、語(yǔ)法和特點(diǎn)

繼承的概念:子類 擁有 父類 的所有 方法 和 屬性
在這里插入圖片描述

  1. 繼承的語(yǔ)法
class 類名(父類名):

  pass

子類 繼承自 父類,可以直接 享受 父類中已經(jīng)封裝好的方法,不需要再次開(kāi)發(fā)
子類 中應(yīng)該根據(jù) 職責(zé),封裝 子類特有的 屬性和方法
2) 專業(yè)術(shù)語(yǔ)
Dog 類是 Animal 類的子類,Animal 類是 Dog 類的父類,Dog 類從 Animal 類繼承
Dog 類是 Animal 類的派生類,Animal 類是 Dog 類的基類,Dog 類從 Animal 類派生
3) 繼承的傳遞性
C 類從 B 類繼承,B 類又從 A 類繼承
那么 C 類就具有 B 類和 A 類的所有屬性和方法
子類 擁有 父類 以及 父類的父類 中封裝的所有 屬性 和 方法

提問(wèn)

哮天犬 能夠調(diào)用 Cat 類中定義的 catch 方法嗎?

答案

不能,因?yàn)?哮天犬 和 Cat 之間沒(méi)有 繼承 關(guān)系

1.2 方法的重寫(xiě)

子類 擁有 父類 的所有 方法 和 屬性
子類 繼承自 父類,可以直接 享受 父類中已經(jīng)封裝好的方法,不需要再次開(kāi)發(fā)
應(yīng)用場(chǎng)景

當(dāng) 父類 的方法實(shí)現(xiàn)不能滿足子類需求時(shí),可以對(duì)方法進(jìn)行 重寫(xiě)(override)
在這里插入圖片描述
重寫(xiě) 父類方法有兩種情況:

覆蓋 父類的方法
對(duì)父類方法進(jìn)行 擴(kuò)展

  1. 覆蓋父類的方法
    如果在開(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)用 父類封裝的方法

  1. 對(duì)父類方法進(jìn)行 擴(kuò)展
    如果在開(kāi)發(fā)中,子類的方法實(shí)現(xiàn) 中 包含 父類的方法實(shí)現(xiàn)
    父類原本封裝的方法實(shí)現(xiàn) 是 子類方法的一部分
    就可以使用 擴(kuò)展 的方式
    在子類中 重寫(xiě) 父類的方法
    在需要的位置使用 super().父類方法 來(lái)調(diào)用父類方法的執(zhí)行
    代碼其他的位置針對(duì)子類的需求,編寫(xiě) 子類特有的代碼實(shí)現(xiàn)
    關(guān)于 super
    在 Python 中 super 是一個(gè) 特殊的類
    super() 就是使用 super 類創(chuàng)建出來(lái)的對(duì)象
    最常 使用的場(chǎng)景就是在 重寫(xiě)父類方法時(shí),調(diào)用 在父類中封裝的方法實(shí)現(xiàn)
    調(diào)用父類方法的另外一種方式(知道)
    在 Python 2.x 時(shí),如果需要調(diào)用父類的方法,還可以使用以下方式:
父類名.方法(self)

這種方式,目前在 Python 3.x 還支持這種方式
這種方法 不推薦使用,因?yàn)橐坏?父類發(fā)生變化,方法調(diào)用位置的 類名 同樣需要修改
提示

在開(kāi)發(fā)時(shí),父類名 和 super() 兩種方式不要混用
如果使用 當(dāng)前子類名 調(diào)用方法,會(huì)形成遞歸調(diào)用,出現(xiàn)死循環(huán)

1.3 父類的 私有屬性 和 私有方法

子類對(duì)象 不能 在自己的方法內(nèi)部,直接 訪問(wèn) 父類的 私有屬性 或 私有方法
子類對(duì)象 可以通過(guò) 父類 的 公有方法 間接 訪問(wèn)到 私有屬性 或 私有方法
私有屬性、方法 是對(duì)象的隱私,不對(duì)外公開(kāi),外界 以及 子類 都不能直接訪問(wèn)
私有屬性、方法 通常用于做一些內(nèi)部的事情
示例
在這里插入圖片描述
B 的對(duì)象不能直接訪問(wèn) __num2 屬性
B 的對(duì)象不能在 demo 方法內(nèi)訪問(wèn) __num2 屬性
B 的對(duì)象可以在 demo 方法內(nèi),調(diào)用父類的 test 方法
父類的 test 方法內(nèi)部,能夠訪問(wèn) __num2 屬性和 __test 方法

02. 多繼承

概念

子類 可以擁有 多個(gè)父類,并且具有 所有父類 的 屬性 和 方法
例如:孩子 會(huì)繼承自己 父親 和 母親 的 特性
在這里插入圖片描述
語(yǔ)法

class 子類名(父類名1, 父類名2...)
  pass

2.1 多繼承的使用注意事項(xiàng)

問(wèn)題的提出

如果 不同的父類 中存在 同名的方法,子類對(duì)象 在調(diào)用方法時(shí),會(huì)調(diào)用 哪一個(gè)父類中的方法呢?
提示:開(kāi)發(fā)時(shí),應(yīng)該盡量避免這種容易產(chǎn)生混淆的情況! —— 如果 父類之間 存在 同名的屬性或者方法,應(yīng)該 盡量避免 使用多繼承
在這里插入圖片描述
Python 中的 MRO —— 方法搜索順序(知道)
Python 中針對(duì) 類 提供了一個(gè) 內(nèi)置屬性 mro 可以查看 方法 搜索順序
MRO 是 method resolution order,主要用于 在多繼承時(shí)判斷 方法、屬性 的調(diào)用 路徑

print(C.__mro__)

輸出結(jié)果

(<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>)

在搜索方法時(shí),是按照 mro 的輸出結(jié)果 從左至右 的順序查找的
如果在當(dāng)前類中 找到方法,就直接執(zhí)行,不再搜索
如果 沒(méi)有找到,就查找下一個(gè)類 中是否有對(duì)應(yīng)的方法,如果找到,就直接執(zhí)行,不再搜索
如果找到最后一個(gè)類,還沒(méi)有找到方法,程序報(bào)錯(cuò)

2.2 新式類與舊式(經(jīng)典)類

object 是 Python 為所有對(duì)象提供的 基類,提供有一些內(nèi)置的屬性和方法,可以使用 dir 函數(shù)查看

新式類:以 object 為基類的類,推薦使用
經(jīng)典類:不以 object 為基類的類,不推薦使用

在 Python 3.x 中定義類時(shí),如果沒(méi)有指定父類,會(huì) 默認(rèn)使用 object 作為該類的 基類 —— Python 3.x 中定義的類都是 新式類

在 Python 2.x 中定義類時(shí),如果沒(méi)有指定父類,則不會(huì)以 object 作為 基類

新式類 和 經(jīng)典類 在多繼承時(shí) —— 會(huì)影響到方法的搜索順序

為了保證編寫(xiě)的代碼能夠同時(shí)在 Python 2.x 和 Python 3.x 運(yùn)行!
今后在定義類時(shí),如果沒(méi)有父類,建議統(tǒng)一繼承自 object

class 類名(object):
  pass

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python面向?qū)ο蟪绦蛟O(shè)計(jì)入門(mén)與進(jìn)階教程》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python編碼操作技巧總結(jié)》及《Python入門(mén)與進(jìn)階經(jīng)典教程

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • RuntimeError:CUDA?out?of?memory多種場(chǎng)景下的解決方案

    RuntimeError:CUDA?out?of?memory多種場(chǎng)景下的解決方案

    若遇到RuntimeError:?CUDA?out?of?memory錯(cuò)誤,通常意味著GPU內(nèi)存不足以處理當(dāng)前的計(jì)算需求,本文就來(lái)介紹一下多種場(chǎng)景下的解決方案,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • python3中No module named _ssl的問(wèn)題解決

    python3中No module named _ssl的問(wèn)題解決

    本文主要介紹了python3中No module named _ssl的問(wèn)題解決,這個(gè)錯(cuò)誤表示Python導(dǎo)入_ssl模塊時(shí)失敗,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • Python中的enum的使用方法

    Python中的enum的使用方法

    這篇文章主要介紹了Python中的enum的使用方法,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下,希望對(duì)你的學(xué)習(xí)有所幫助
    2022-08-08
  • 在Python中操作文件之seek()方法的使用教程

    在Python中操作文件之seek()方法的使用教程

    這篇文章主要介紹了在Python中操作文件之seek()方法的使用教程,是Python入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-05-05
  • Python數(shù)據(jù)分析之堆疊數(shù)組函數(shù)示例總結(jié)

    Python數(shù)據(jù)分析之堆疊數(shù)組函數(shù)示例總結(jié)

    這篇文章主要為大家介紹了Python數(shù)據(jù)分析之堆疊數(shù)組函數(shù)示例總結(jié),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • python統(tǒng)計(jì)mysql數(shù)據(jù)量變化并調(diào)用接口告警的示例代碼

    python統(tǒng)計(jì)mysql數(shù)據(jù)量變化并調(diào)用接口告警的示例代碼

    這篇文章主要介紹了python統(tǒng)計(jì)mysql數(shù)據(jù)量變化并調(diào)用接口告警的示例代碼,幫助大家更好的利用python操作數(shù)據(jù)庫(kù),感興趣的朋友可以了解下
    2020-09-09
  • Python不同版本實(shí)現(xiàn)配置文件加密

    Python不同版本實(shí)現(xiàn)配置文件加密

    這篇文章主要為大家詳細(xì)介紹了Python不同版本下實(shí)現(xiàn)配置文件加密的示例代碼,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-01-01
  • 詳解在SpringBoot如何優(yōu)雅的使用多線程

    詳解在SpringBoot如何優(yōu)雅的使用多線程

    這篇文章主要帶大家快速了解一下@Async注解的用法,包括異步方法無(wú)返回值、有返回值,最后總結(jié)了@Async注解失效的幾個(gè)坑,感興趣的小伙伴可以了解一下
    2023-02-02
  • Python中的數(shù)據(jù)對(duì)象持久化存儲(chǔ)模塊pickle的使用示例

    Python中的數(shù)據(jù)對(duì)象持久化存儲(chǔ)模塊pickle的使用示例

    這篇文章主要介紹了Python中的數(shù)據(jù)對(duì)象持久化存儲(chǔ)模塊pickle的使用示例,重點(diǎn)講解了pickle中模塊中對(duì)象持久化和文件讀取的相關(guān)方法,需要的朋友可以參考下
    2016-03-03
  • Python獲取當(dāng)前時(shí)間日期的實(shí)現(xiàn)示例

    Python獲取當(dāng)前時(shí)間日期的實(shí)現(xiàn)示例

    本文主要介紹了Python獲取當(dāng)前時(shí)間日期,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03

最新評(píng)論

托里县| 祁阳县| 华容县| 普兰店市| 轮台县| 桦南县| 台湾省| 丹阳市| 宁波市| 濉溪县| 乐陵市| 张家界市| 中卫市| 双辽市| 太和县| 西畴县| 晋州市| 汉阴县| 阿拉善左旗| 察哈| 兴隆县| 鹤峰县| 沁阳市| 赤壁市| 佳木斯市| 五河县| 曲周县| 奇台县| 炉霍县| 德保县| 望江县| 永宁县| 桃源县| 芮城县| 绥德县| 班戈县| 桑植县| 晋中市| 浙江省| 西昌市| 江阴市|