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

Python淺析多態(tài)與鴨子類型使用實例

 更新時間:2022年10月12日 15:43:55   作者:Python熱愛者  
python是一門解釋語言,但是同java等靜態(tài)語言一樣,是可以通過繼承的方式實現(xiàn)多態(tài)。而且python還有一個自己的特殊實現(xiàn)多態(tài)的方法,就是通過鴨子類型,來實現(xiàn)多態(tài)

什么多態(tài):同一事物有多種形態(tài)

為何要有多態(tài)=》多態(tài)會帶來什么樣的特性,多態(tài)性

  • 多態(tài)性指的是可以在不考慮對象具體類型的情況下而直接使用對象
  • 多態(tài)指的是一類事物有多種形態(tài),比如動物有多種形態(tài):貓、狗、豬
class Animal: #同一類事物:動物
    def talk(self):
        pass
class Cat(Animal): #動物的形態(tài)之一:貓
    def talk(self):
        print('喵喵喵')
class Dog(Animal): #動物的形態(tài)之二:狗
    def talk(self):
        print('汪汪汪')
class Pig(Animal): #動物的形態(tài)之三:豬
    def talk(self):
        print('哼哼哼')
#實例化得到三個對象
>>> cat=Cat()
>>> dog=Dog()
>>> pig=Pig()

多態(tài)性指的是可以在不用考慮對象具體類型的情況下而直接使用對象,這就需要在設(shè)計時,把對象的使用方法統(tǒng)一成一種:例如cat、dog、pig都是動物,但凡是動物肯定有talk方法,于是我們可以不用考慮它們?nèi)叩木唧w是什么類型的動物,而直接使用

>>> cat.talk()
喵喵喵
>>> dog.talk()
汪汪汪
>>> pig.talk()
哼哼哼

綜上我們得知,多態(tài)性的本質(zhì)在于不同的類中定義有相同的方法名,這樣我們就可以不考慮類而統(tǒng)一用一種方式去使用對象,可以通過在父類引入抽象類的概念來硬性限制子類必須有某些方法名

import abc
# 指定metaclass屬性將類設(shè)置為抽象類,抽象類本身只是用來約束子類的,不能被實例化
class Animal(metaclass=abc.ABCMeta):
    @abc.abstractmethod # 該裝飾器限制子類必須定義有一個名為talk的方法
    def talk(self): # 抽象方法中無需實現(xiàn)具體的功能
        pass
class Cat(Animal): # 但凡繼承Animal的子類都必須遵循Animal規(guī)定的標(biāo)準(zhǔn)
    def talk(self):
        pass
cat=Cat() # 若子類中沒有一個名為talk的方法則會拋出異常TypeError,無法實例化

但其實我們完全可以不依賴于繼承,只需要制造出外觀和行為相同對象,同樣可以實現(xiàn)不考慮對象類型而使用對象,這正是Python崇尚的“鴨子類型”(duck typing):“如果看起來像、叫聲像而且走起路來像鴨子,那么它就是鴨子”。

比起繼承的方式,鴨子類型在某種程度上實現(xiàn)了程序的松耦合度,如下

#二者看起來都像文件,因而就可以當(dāng)文件一樣去用,然而它們并沒有直接的關(guān)系
class Txt: #Txt類有兩個與文件類型同名的方法,即read和write
    def read(self):
        pass
    def write(self):
        pass
class Disk: #Disk類也有兩個與文件類型同名的方法:read和write
    def read(self):
        pass
    def write(self):
        pass

到此這篇關(guān)于Python淺析多態(tài)與鴨子類型使用實例的文章就介紹到這了,更多相關(guān)Python多態(tài)與鴨子類型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用python制作一個簡單的井字棋游戲

    使用python制作一個簡單的井字棋游戲

    井字棋(Tic-Tac-Toe)是一種經(jīng)典的兩人棋盤游戲,通常由兩名玩家輪流下棋,目標(biāo)是在一個3x3的棋盤上先形成橫向、縱向或?qū)蔷€的三個棋子,本文將介紹如何使用 Python 制作一個簡單的井字棋游戲、包括游戲規(guī)則、界面設(shè)計和實現(xiàn)代碼,需要的朋友可以參考下
    2023-11-11
  • Python文件及目錄操作實例詳解

    Python文件及目錄操作實例詳解

    這篇文章主要介紹了Python文件及目錄操作的方法,實例分析了Python中os模塊的使用技巧,需要的朋友可以參考下
    2015-06-06
  • flask 使用 flask_apscheduler 做定時循環(huán)任務(wù)的實現(xiàn)

    flask 使用 flask_apscheduler 做定時循環(huán)任務(wù)的實現(xiàn)

    這篇文章主要介紹了flask 使用 flask_apscheduler 做定時循環(huán)任務(wù)的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 詳解Python不同版本之間的切換方法

    詳解Python不同版本之間的切換方法

    本文主要介紹了詳解Python不同版本之間的切換方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • python os.rename實例用法詳解

    python os.rename實例用法詳解

    在本篇文章里小編給大家整理的是一篇關(guān)于python os.rename實例用法詳解內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。
    2020-12-12
  • python怎么去除字符串最后的換行符‘\n’

    python怎么去除字符串最后的換行符‘\n’

    這篇文章主要介紹了python去除字符串最后的換行符'\n',本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • Python的字典和列表的使用中一些需要注意的地方

    Python的字典和列表的使用中一些需要注意的地方

    這篇文章主要介紹了Python的字典和列表的使用中一些需要注意的地方,字典和列表的使用是Python學(xué)習(xí)當(dāng)中的基本功,需要的朋友可以參考下
    2015-04-04
  • Python爬蟲框架Scrapy實戰(zhàn)之批量抓取招聘信息

    Python爬蟲框架Scrapy實戰(zhàn)之批量抓取招聘信息

    網(wǎng)絡(luò)爬蟲又被稱為網(wǎng)頁蜘蛛,網(wǎng)絡(luò)機(jī)器人,在FOAF社區(qū)中間,更經(jīng)常的稱為網(wǎng)頁追逐者,是按照一定的規(guī)則,自動抓取萬維網(wǎng)信息的程序或者腳本。這篇文章主要介紹Python爬蟲框架Scrapy實戰(zhàn)之批量抓取招聘信息,有需要的朋友可以參考下
    2015-08-08
  • Python設(shè)計模式中的創(chuàng)建型工廠模式

    Python設(shè)計模式中的創(chuàng)建型工廠模式

    這篇文章主要介紹了Python設(shè)計模式中的創(chuàng)建型工廠模式,工廠模式即Factory?Pattern,是提供創(chuàng)建對象的最佳方式,下文小編介紹Python工廠模式的相關(guān)資料,需要的朋友可以參考一下
    2022-02-02
  • Pysvn 使用指南

    Pysvn 使用指南

    本文主要介紹了Pysvn 使用指南,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02

最新評論