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

Python 面向對象編程的三大特性之繼承

 更新時間:2021年09月02日 09:23:12   作者:小菠蘿的測試筆記  
繼承也是面向對象編程三大特性之一,本篇文章我們就來學習Python中繼承的用處、使用場景及用與不用的區(qū)別,感興趣的朋友一起來閱讀下面文章吧

Python  面向對象編程的三大特性之繼承

一、繼承

  • 繼承也是面向對象編程三大特性之一
  • 繼承是類與類的一種關系
  • 定義一個新的 class 時,可以從某個現(xiàn)有的 class 繼承
  • 新的 class 類就叫子類(Subclass
  • 被繼承的類一般稱為父類、基類超類
  • 通俗理解:子類與父類的關系,即爸爸與兒子,爸爸有了個兒子,兒子繼承爸爸的屬性和方法,爸爸的爸爸就是爺爺...以此類推

1、繼承的實際栗子

  • 貓、狗都是動物,所以動物是父類,貓、狗是動物的子類
  • 小菠蘿、大菠蘿都是人類,所以人類是父類,小菠蘿、大菠蘿是人類的子類
  • 動物、人類都是生物,所以生物是父類,動物、人類是生物的子類
  • 那么一般稱生物類是貓、狗、小菠蘿、大菠蘿的超類、祖父類

2、繼承的好處

  • 實現(xiàn)代碼的重用,相同的代碼不需要重復編寫
  • 子類擁有父類的所有屬性、方法,提高了代碼的可擴展性和重用性
  • 在子類繼承父類的同時,也可以重新定義某些屬性,并重寫某些方法,即覆蓋父類的屬性、方法,變成子類獨有的屬性、方法
  • 子類也可以添加新的屬性、方法

3、繼承的使用場景

  • 假如我需要定義幾個類,而類與類之間有一些公共的屬性和方法
  • 可以把公共的屬性和方法提取作為父類(基類)的屬性、方法,而特殊的屬性、方法則在本類中定義
  • 比如貓、狗都有吃喝拉撒四種行為,這些就是公共方法;但只有貓會喵喵叫,只有狗會汪汪叫,這些就是特殊方法

具體可以看下面的【不使用繼承、使用繼承的區(qū)別】

4、繼承有幾種?

單繼承
多繼承

5、Python 中繼承的簡單語法

class Parent:
    pass

class Child(Parent):
    pass

有個重點:

所有類的都有一個共同父類,就是 object,默認會繼承它,寫或不寫都一樣

class Parent:
    pass

class Parent(object):
    pass

二、不使用繼承、使用繼承的區(qū)別

1、需求背景

有一個動物類、狗類、貓類

  • 動物類有吃、喝、跑方法
  • 狗類有吃、喝、跑、汪汪叫方法
  • 貓類有吃、喝、跑、喵喵叫方法

2、不使用繼承

類圖

需求分析

  • 每個類都擁有自己的方法
  • 他們都擁有吃、喝、拉方法,且功能一樣

實際代碼:

# 不使用繼承
class Animal:
    def eat(self):
        print("吃東西...")

    def drink(self):
        print("喝水...")

    def run(self):
        print("跑步...")


class Cat:
    def eat(self):
        print("吃東西...")

    def drink(self):
        print("喝水...")

    def run(self):
        print("跑步...")

    def miao(self):
        print("喵喵叫...")


class Dog:
    def eat(self):
        print("吃東西...")

    def drink(self):
        print("喝水...")

    def run(self):
        print("跑步...")

    def wang(self):
        print("汪汪叫...")
 

這樣寫有什么問題?

  • 三個類,需要重復寫三次吃、喝、跑的方法
  • 假設此時需要修改 吃 方法的代碼,那么還得同步修改三個類的 吃 方法,屬于不必要的重復性工作
  • 使用繼承可以大大減少開發(fā)工作量

2、使用繼承

類圖

從類圖就能看到,使用繼承就變得簡單多了

需求分析

  • 提取三個類的公共方法,吃、喝、跑,然后抽象成動物類
  • 所以動物類是一個父類,狗類、貓類繼承它

實際代碼:

# 使用繼承
class Animal:
    def eat(self):
        print("吃東西...")

    def drink(self):
        print("喝水...")

    def run(self):
        print("跑步...")


class Cat(Animal):
    def miao(self):
        print("喵喵叫...")


class Dog(Animal):
    def wang(self):
        print("汪汪叫...")
 

優(yōu)勢:

  • 子類繼承父類,可以直接享受父類已經(jīng)封裝好的方法,不再需要自己開發(fā)一次
  • 子類可以根據(jù)自身的需要,封裝子類獨有的屬性、方法,比如貓類的喵喵叫,狗類的汪汪叫 

專業(yè)術語總結

  • Dog 類是 Animale 類的子類,Animal 類是 Dog 類的父類,Dog 類從 Animal 類繼承
  • Dog 類是 Animale 類的派生類,Animal 類是 Dog 類的基類,Dog 類從 Animal 類派生

三、繼承的傳遞性

1、什么是傳遞性

通俗來講

  • C 類從 B 類繼承,B 類又從 A 類繼承
  • 那么 C 類會擁有 A、B 類的所有屬性和方法 

官方來講

  • 子類擁有父類以及父類的父類,以及所有父類的父類的父類...中封裝的所有屬性、方法

實際栗子:

  • 還是拿上面的動物類、狗類、貓類繼續(xù)展開講
  • 假設此時有一個新的類叫柴犬類,繼承于狗類,有獨有的方法搖尾巴

類圖

實際代碼:

class Animal:
    def eat(self):
        print("吃東西...")

    def drink(self):
        print("喝水...")

    def run(self):
        print("跑步...")


class Cat(Animal):
    def miao(self):
        print("喵喵叫...")


class Dog(Animal):
    def wang(self):
        print("汪汪叫...")


class Chai(Dog):
    def shake(self):
        print("小柴柴搖尾巴...")


chai = Chai()
# 調用 父類的父類 的方法
chai.eat()
# 調用 父類 的方法
chai.wang()
# 調用 自己獨有 的方法
chai.shake()


# 輸出結果
吃東西...
汪汪叫...
小柴柴搖尾巴...


  • Chai 類擁有 Dog 類、Animal 類所有屬性、方法
  • 但它不會擁有 Cat 類的屬性、方法,因為他們沒有繼承關系

四、繼承和抽象

抽象即抽取類似或者說比較像的部分

小栗子:

  • 從小菠蘿、小韻韻兩個對象中,抽取公共部分抽象成父類
  • 再從人,豬,狗這三個類,抽取公共部分抽象成父類

1、繼承的重點

  • 是基于抽象的結果,通過編程語言去實現(xiàn)它
  • 先經(jīng)歷抽象這個過程,才能通過繼承的方式去表達出抽象的結構
  • 抽象只是分析和設計的過程中,一個動作或者說一個技巧,通過抽象得到一個類

代碼栗子:

class Animal:
    def __init__(self, name, age, sex):
        self.__name = name
        self.__age = age
        self.__sex = sex

    # 提取的公共方法
    def eat(self):
        print(f"{self.__name} 正在吃飯....")

    @property
    def name(self):
        return self.__name


class Person(Animal):
    def walk(self):
        print(f"{self.name} 兩條腿正在走路")


class Pig(Animal):
    def kill(self):
        print(f"{self.name} 豬正在去屠宰場ing...")


class Dog(Animal):
    def wang(self):
        print(f"{self.name} 汪汪叫ing...")


person = Person("小菠蘿", 25, "Male")
pig = Pig("麥兜", 4, "公")
dog = Dog("柴犬", 3, "母")

# 調用父類的公共方法
person.eat()
pig.eat()
dog.eat()

# 調用子類獨有的方法
person.walk()
pig.kill()
dog.wang()

 

# 輸出結果
小菠蘿 正在吃飯....
麥兜 正在吃飯....
柴犬 正在吃飯....

小菠蘿 兩條腿正在走路
麥兜 豬正在去屠宰場ing...
柴犬 汪汪叫ing...

以上就是Python  面向對象編程的三大特性之繼承的詳細內容,更多關于Python  面向對象編程的繼承的資料請關注腳本之家其它相關文章!希望大家以后多多支持腳本之家!

相關文章

  • 對Python中range()函數(shù)和list的比較

    對Python中range()函數(shù)和list的比較

    下面小編就為大家分享一篇對Python中range()函數(shù)和list的比較,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • Windows下python2.7.8安裝圖文教程

    Windows下python2.7.8安裝圖文教程

    這篇文章主要為大家詳細介紹了Windows下python2.7.8安裝圖文教程,在安裝過程中出現(xiàn)“python不是內部或外部命令”提示的解決方法,感興趣的小伙伴們可以參考一下
    2016-05-05
  • python mysql項目實戰(zhàn)及框架搭建過程

    python mysql項目實戰(zhàn)及框架搭建過程

    本文給大家分享python mysql項目實戰(zhàn)框架搭建過程,通過實例代碼給大家講解python mysql項目實戰(zhàn)的相關知識,需要的朋友參考下吧
    2021-06-06
  • flask post獲取前端請求參數(shù)的三種方式總結

    flask post獲取前端請求參數(shù)的三種方式總結

    這篇文章主要介紹了flask post獲取前端請求參數(shù)的三種方式總結,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 用python處理MS Word的實例講解

    用python處理MS Word的實例講解

    今天小編就為大家分享一篇用python處理MS Word的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Python實現(xiàn)識別圖片內容的方法分析

    Python實現(xiàn)識別圖片內容的方法分析

    這篇文章主要介紹了Python實現(xiàn)識別圖片內容的方法,結合實例形式分析了tesseract模塊的下載、安裝配置及使用tesseract模塊進行圖片識別的相關操作技巧,需要的朋友可以參考下
    2018-07-07
  • python中函數(shù)返回多個結果的實例方法

    python中函數(shù)返回多個結果的實例方法

    在本篇文章里小編給大家整理了一篇關于python中函數(shù)返回多個結果的實例方法,有興趣的朋友們可以學習下。
    2020-12-12
  • 跟老齊學Python之玩轉字符串(3)

    跟老齊學Python之玩轉字符串(3)

    字符串是一個很長的話題,縱然現(xiàn)在開始第三部分,但是也不能完全說盡。因為字符串是自然語言中最復雜的東西,也是承載功能最多的,計算機高級語言編程,要解決自然語言中的問題,讓自然語言中完成的事情在計算機上完成,所以,也不得不有更多的話題。
    2014-09-09
  • 通過實例簡單了解python yield使用方法

    通過實例簡單了解python yield使用方法

    這篇文章主要介紹了通過實例簡單了解python yield使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • 總結python爬蟲抓站的實用技巧

    總結python爬蟲抓站的實用技巧

    很多人學用python,用得最多的還是各類爬蟲腳本:有寫過抓代理本機驗證的腳本,有寫過自動收郵件的腳本,還有寫過簡單的驗證碼識別的腳本,那么我們今天就來總結下python爬蟲抓站的一些實用技巧。
    2016-08-08

最新評論

巴南区| 哈巴河县| 龙南县| 临朐县| 婺源县| 贵阳市| 巍山| 松江区| 东兰县| 扶余县| 克山县| 潢川县| 牟定县| 元谋县| 祁阳县| 黔西| 娄烦县| 鲜城| 女性| 柘城县| 秦皇岛市| 万年县| 巩留县| 黎平县| 桂平市| 招远市| 广灵县| 西昌市| 博爱县| 海安县| 定结县| 漳浦县| 岳普湖县| 两当县| 唐河县| 和静县| 邹平县| 邢台市| 开化县| 高青县| 新化县|