python 多型 協議詳解
介面(python 中的協議)的多種不同的實現方式即為多型。多型的作用,就是為了類在繼承和派生的時候,保證使用“家譜”中任一類的例項的某一屬性時的正確呼叫。
from abc import ABCMeta, abstractmethod # 鴨子類 class Dock(metaclass=ABCMeta): @abstractmethod def Swimming(self): # 游泳方法協議(介面) pass @abstractmethod # 走路協議(介面) def Walk(self): pass @classmethod def __subclasshook__(cls, C): # 判斷是否另一個比較類是否實現了 Swimming Walk 協議, 如果實現了鴨子類的這兩個協議, # 那麼比較類的型別就是一個鴨子型別 # 當程式碼執行中如果執行到物件和這個類進行 isinstance 型別判斷時會走到這個函式進行判斷 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): # 實現swimming 協議 def Swimming(self): print("狗會狗刨") # 實現walk 協議 def Walk(self): print("狗會走路") def Eat(self): print("狗喜歡吃骨頭") # 烏龜類 class Tortoise(object): # 實現swimming 協議 def Swimming(self): print("烏龜會潛水") # 實現walk 協議 def Walk(self): print("烏龜會走路") def Eat(self): print("烏龜喜歡吃魚") dog = Dog() tortoise = Tortoise() print(isinstance(dog, Dock)) # True print(isinstance(tortoise, Dock)) # True
可以看到,在上面的程式碼中,只要實現了 Dock 類中的 swimming 和 Walk 方法,那麼這個類就可以被叫做 Dock 類
應用場景 如: for 迴圈, 在python 中 for 迴圈只能用於可迭代物件, 那麼, 我自己定義的類實現了 __iter__協議(介面),這個例項類就是一個可迭代物件,可以被for 迴圈使用
python 中定義協議類協議使用 @abstractmethod 裝飾器,@abstractmethod 裝飾過的類是不能進行初始化的,相對於c++中的純虛擬函式類
這個類只能當做協議(介面)類
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69901823/viewspace-2847227/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python:多型、協議和鴨子型別Python多型協議型別
- FTP協議詳解FTP協議
- raft協議詳解Raft協議
- TCP協議詳解TCP協議
- Kraft協議詳解Raft協議
- VxLAN協議詳解協議
- HTTPS協議詳解HTTP協議
- Gossip 協議詳解Go協議
- USB協議詳解協議
- SPI協議詳解協議
- HTTP協議詳解HTTP協議
- QUIC協議詳解UI協議
- WebSocket 協議詳解Web協議
- UDP協議詳解UDP協議
- http協議/cookie詳解/session詳解HTTP協議CookieSession
- 網路通訊協議-ICMP協議詳解!協議
- 網路通訊協議-TCP協議詳解!協議TCP
- 網路通訊協議-HTTP協議詳解!協議HTTP
- 網路通訊協議-SMTP協議詳解!協議
- 組播協議詳解協議
- HTTP 3協議詳解HTTP協議
- tcp/ip協議和opc協議對比詳解TCP協議
- TCP傳輸協議詳解TCP協議
- IMAP協議之BODYSTRUCTURE詳解協議Struct
- V-By-One協議詳解協議
- OSPF 路由協議詳解(一)路由協議
- MQTT 協議 Keep Alive 詳解MQQT協議
- 網路協議之:socket協議詳解之Datagram Socket協議
- 常見協議埠號對應 + 重要協議詳解協議
- Python協程詳解Python
- 網路協議之:socket協議詳解之Unix domain Socket協議AI
- WiFi協議技術詳解概述WiFi協議
- 常見開源協議詳解協議
- 詳解Tomcat核心配置、http協議TomcatHTTP協議
- 一文詳解 ARP 協議協議
- 網路協議之:socket協議詳解之Socket和Stream Socket協議
- 詳解前端HTTP協議入門教程前端HTTP協議
- TCP協議粘包問題詳解TCP協議