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

python?多態(tài)?協(xié)議?鴨子類型詳解

 更新時間:2021年11月26日 15:55:36   作者:tnan2522  
這篇文章主要為大家介紹了python?多態(tài)?協(xié)議?鴨子類型,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

接口(python 中的協(xié)議)的多種不同的實現(xiàn)方式即為多態(tài)。多態(tài)的作用,就是為了類在繼承和派生的時候,保證使用“家譜”中任一類的實例的某一屬性時的正確調(diào)用。

from abc import ABCMeta, abstractmethod
# 鴨子類
class Dock(metaclass=ABCMeta):
    @abstractmethod
    def Swimming(self):  # 游泳方法協(xié)議(接口)
        pass
    @abstractmethod  # 走路協(xié)議(接口)
    def Walk(self):
        pass
    @classmethod
    def __subclasshook__(cls, C):
        # 判斷是否另一個比較類是否實現(xiàn)了 Swimming Walk 協(xié)議, 如果實現(xiàn)了鴨子類的這兩個協(xié)議,
        # 那么比較類的類型就是一個鴨子類型
        # 當(dāng)代碼執(zhí)行中如果執(zhí)行到對象和這個類進行 isinstance 類型判斷時會走到這個函數(shù)進行判斷
        for method in ('Swimming', 'Walk'):
            for B in C.__mro__:
                if method in B.__dict__:
                    if B.__dict__[method] is None:
                        return NotImplemented
                    break
            else:
                return NotImplemented
        return True
# 狗類
class Dog(object):
    # 實現(xiàn)swimming 協(xié)議
    def Swimming(self):
        print("狗會狗刨")
    # 實現(xiàn)walk 協(xié)議
    def Walk(self):
        print("狗會走路")
    def Eat(self):
        print("狗喜歡吃骨頭")
# 烏龜類
class Tortoise(object):
    # 實現(xiàn)swimming 協(xié)議
    def Swimming(self):
        print("烏龜會潛水")
    # 實現(xiàn)walk 協(xié)議
    def Walk(self):
        print("烏龜會走路")
    def Eat(self):
        print("烏龜喜歡吃魚")

dog = Dog()
tortoise = Tortoise()
print(isinstance(dog, Dock))         # True
print(isinstance(tortoise, Dock))	 # True

可以看到,在上面的代碼中,只要實現(xiàn)了 Dock 類中的 swimming 和 Walk 方法,那么這個類就可以被叫做 Dock 類

應(yīng)用場景 如: for 循環(huán), 在python 中 for 循環(huán)只能用于可迭代對象, 那么, 我自己定義的類實現(xiàn)了 __iter__協(xié)議(接口),這個實例類就是一個可迭代對象,可以被for 循環(huán)使用

python 中定義協(xié)議類協(xié)議使用 @abstractmethod 裝飾器,@abstractmethod 裝飾過的類是不能進行初始化的,相對于c++中的純虛函數(shù)類
這個類只能當(dāng)做協(xié)議(接口)類

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • python詳解如何通過sshtunnel pymssql實現(xiàn)遠程連接數(shù)據(jù)庫

    python詳解如何通過sshtunnel pymssql實現(xiàn)遠程連接數(shù)據(jù)庫

    為了安全起見,很多公司服務(wù)器數(shù)據(jù)庫的訪問多半是要做限制的,由專門的DBA管理,而且都是做的集群,數(shù)據(jù)庫只能內(nèi)網(wǎng)訪問,所以就有一個直接的問題是,往往多數(shù)時候,在別的機器上(比如自己本地),是不能訪問數(shù)據(jù)庫的,給日常開發(fā)調(diào)試造成了很大不便
    2021-10-10
  • Python中高階函數(shù)的小實踐分享

    Python中高階函數(shù)的小實踐分享

    這篇文章主要為大家介紹了一些Python中高階函數(shù)的小實踐,文中的示例代碼講解詳細,對我們深入學(xué)習(xí)Python有一定的幫助,需要的可以參考下
    2023-05-05
  • Python程序中使用SQLAlchemy時出現(xiàn)亂碼的解決方案

    Python程序中使用SQLAlchemy時出現(xiàn)亂碼的解決方案

    這篇文章主要介紹了Python程序中使用SQLAlchemy時出現(xiàn)亂碼的解決方案,SQLAlchemy是Python常用的操作MySQL數(shù)據(jù)庫的工具,需要的朋友可以參考下
    2015-04-04
  • 使用python+whoosh實現(xiàn)全文檢索

    使用python+whoosh實現(xiàn)全文檢索

    今天小編就為大家分享一篇使用python+whoosh實現(xiàn)全文檢索,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • python?中的jieba分詞庫

    python?中的jieba分詞庫

    這篇文章主要介紹了python中的jieba分詞庫,jieba?庫是優(yōu)秀的中文分詞第三方庫,中文文本需要通過分詞獲得單個的詞語,下面文章的的詳細內(nèi)容,需要的朋友可以參考一下
    2021-11-11
  • Python虛擬環(huán)境的創(chuàng)建和使用詳解

    Python虛擬環(huán)境的創(chuàng)建和使用詳解

    這篇文章主要給大家介紹了關(guān)于Python虛擬環(huán)境的創(chuàng)建和使用的相關(guān)資料,文中通過圖文介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • python監(jiān)控文件并且發(fā)送告警郵件

    python監(jiān)控文件并且發(fā)送告警郵件

    這篇文章主要為大家詳細介紹了python監(jiān)控文件,并且發(fā)送告警郵件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • pip install命令安裝擴展庫整理

    pip install命令安裝擴展庫整理

    這篇文章主要介紹了pip install命令安裝擴展庫整理,文中代碼和圖文講解的很詳細,有需要的同學(xué)可以參考下
    2021-03-03
  • Python數(shù)據(jù)結(jié)構(gòu)之遞歸可視化詳解

    Python數(shù)據(jù)結(jié)構(gòu)之遞歸可視化詳解

    遞歸函數(shù)是直接調(diào)用自己或通過一系列語句間接調(diào)用自己的函數(shù)。遞歸在程序設(shè)計有著舉足輕重的作用,在很多情況下,借助遞歸可以優(yōu)雅的解決問題。本文主要介紹了如何利用可視化方式來了解遞歸函數(shù)的執(zhí)行步驟,需要的可以參考一下
    2022-04-04
  • Django中間件整合Vue攔截器的使用

    Django中間件整合Vue攔截器的使用

    本文主要介紹了Django中間件整合Vue攔截器的使用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09

最新評論