欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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è)抽象的 類(lèi) 中
繼承 實(shí)現(xiàn)代碼的重用,相同的代碼不需要重復(fù)的編寫(xiě)
多態(tài) 不同的對(duì)象調(diào)用相同的方法,產(chǎn)生不同的執(zhí)行結(jié)果,增加代碼的靈活度

01. 單繼承

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

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

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

  pass

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

提問(wèn)

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

答案

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

1.2 方法的重寫(xiě)

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

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

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

  1. 覆蓋父類(lèi)的方法
    如果在開(kāi)發(fā)中,父類(lèi)的方法實(shí)現(xiàn) 和 子類(lèi)的方法實(shí)現(xiàn),完全不同
    就可以使用 覆蓋 的方式,在子類(lèi)中 重新編寫(xiě) 父類(lèi)的方法實(shí)現(xiàn)
    具體的實(shí)現(xiàn)方式,就相當(dāng)于在 子類(lèi)中 定義了一個(gè) 和父類(lèi)同名的方法并且實(shí)現(xiàn)

重寫(xiě)之后,在運(yùn)行時(shí),只會(huì)調(diào)用 子類(lèi)中重寫(xiě)的方法,而不再會(huì)調(diào)用 父類(lèi)封裝的方法

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

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

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

1.3 父類(lèi)的 私有屬性 和 私有方法

子類(lèi)對(duì)象 不能 在自己的方法內(nèi)部,直接 訪問(wèn) 父類(lèi)的 私有屬性 或 私有方法
子類(lèi)對(duì)象 可以通過(guò) 父類(lèi) 的 公有方法 間接 訪問(wèn)到 私有屬性 或 私有方法
私有屬性、方法 是對(duì)象的隱私,不對(duì)外公開(kāi),外界 以及 子類(lè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)用父類(lèi)的 test 方法
父類(lèi)的 test 方法內(nèi)部,能夠訪問(wèn) __num2 屬性和 __test 方法

02. 多繼承

概念

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

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

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

問(wèn)題的提出

如果 不同的父類(lèi) 中存在 同名的方法,子類(lèi)對(duì)象 在調(diào)用方法時(shí),會(huì)調(diào)用 哪一個(gè)父類(lèi)中的方法呢?
提示:開(kāi)發(fā)時(shí),應(yīng)該盡量避免這種容易產(chǎn)生混淆的情況! —— 如果 父類(lèi)之間 存在 同名的屬性或者方法,應(yīng)該 盡量避免 使用多繼承
在這里插入圖片描述
Python 中的 MRO —— 方法搜索順序(知道)
Python 中針對(duì) 類(lèi) 提供了一個(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)前類(lèi)中 找到方法,就直接執(zhí)行,不再搜索
如果 沒(méi)有找到,就查找下一個(gè)類(lèi) 中是否有對(duì)應(yīng)的方法,如果找到,就直接執(zhí)行,不再搜索
如果找到最后一個(gè)類(lèi),還沒(méi)有找到方法,程序報(bào)錯(cuò)

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

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

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

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

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

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

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

class 類(lèi)名(object):
  pass

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《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)文章

  • python使用tkinter實(shí)現(xiàn)透明窗體

    python使用tkinter實(shí)現(xiàn)透明窗體

    一直在思索實(shí)現(xiàn)一個(gè)透明的窗體,然后可以基于這個(gè)窗體可以開(kāi)發(fā)出各種好玩的應(yīng)用(如桌面運(yùn)動(dòng)的小人、運(yùn)動(dòng)的小球、截圖、錄制GIF等等),今天無(wú)意間居然讓我把其中一個(gè)最核心的技術(shù)難關(guān)突破了,我非常高興,也借這個(gè)機(jī)會(huì)跟大家分享一下。
    2021-05-05
  • Python+OpenCV實(shí)現(xiàn)閾值分割的方法詳解

    Python+OpenCV實(shí)現(xiàn)閾值分割的方法詳解

    閾值分割法是一種基于區(qū)域的圖像分割技術(shù),原理是把圖像像素點(diǎn)分為若干類(lèi)。本文將利用Python+OpenCV實(shí)現(xiàn)閾值分割,感興趣的可以了解一下
    2022-05-05
  • pandas 缺失值與空值處理的實(shí)現(xiàn)方法

    pandas 缺失值與空值處理的實(shí)現(xiàn)方法

    這篇文章主要介紹了pandas 缺失值與空值處理的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Python 根據(jù)日志級(jí)別打印不同顏色的日志的方法示例

    Python 根據(jù)日志級(jí)別打印不同顏色的日志的方法示例

    這篇文章主要介紹了Python 根據(jù)日志級(jí)別打印不同顏色的日志的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Flask框架通過(guò)Flask_login實(shí)現(xiàn)用戶(hù)登錄功能示例

    Flask框架通過(guò)Flask_login實(shí)現(xiàn)用戶(hù)登錄功能示例

    這篇文章主要介紹了Flask框架通過(guò)Flask_login實(shí)現(xiàn)用戶(hù)登錄功能,結(jié)合實(shí)例形式較為詳細(xì)的分析了flask框架使用Flask_login實(shí)現(xiàn)用戶(hù)登陸功能的具體操作步驟、相關(guān)實(shí)現(xiàn)技巧與操作注意事項(xiàng),需要的朋友可以參考下
    2018-07-07
  • python基礎(chǔ)--除法(/,//,%)的應(yīng)用說(shuō)明

    python基礎(chǔ)--除法(/,//,%)的應(yīng)用說(shuō)明

    這篇文章主要介紹了python基礎(chǔ)--除法(/,//,%)的應(yīng)用說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • 使用pandas讀取文件的實(shí)現(xiàn)

    使用pandas讀取文件的實(shí)現(xiàn)

    這篇文章主要介紹了使用pandas讀取文件的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Python測(cè)試Kafka集群(pykafka)實(shí)例

    Python測(cè)試Kafka集群(pykafka)實(shí)例

    今天小編就為大家分享一篇Python測(cè)試Kafka集群(pykafka)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • 在?Python?中如何為對(duì)象添加屬性

    在?Python?中如何為對(duì)象添加屬性

    在本文中我們將介紹如何在Python中為對(duì)象添加屬性,我們還將通過(guò)示例介紹如何在Python中更改對(duì)象的屬性,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-06-06
  • Python+matplotlib調(diào)用隨機(jī)函數(shù)生成變化圖形

    Python+matplotlib調(diào)用隨機(jī)函數(shù)生成變化圖形

    這篇文章主要介紹了如何在Python中利用隨機(jī)函數(shù)生成變化的圖形,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)有一定吧參考價(jià)值,需要的可以了解一下
    2022-04-04

最新評(píng)論