91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python面向對象之接口、抽象類與多態的示例分析

發布時間:2021-08-26 09:12:25 來源:億速云 閱讀:180 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關Python面向對象之接口、抽象類與多態的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

具體如下:

接口類

繼承有兩種用途:

一:繼承基類的方法,并且做出自己的改變或者擴展(代碼重用)

二:聲明某個子類兼容于某基類,定義一個接口類Interface,接口類中定義了一些接口名(就是函數名)且并未實現接口的功能,子類繼承接口類,并且實現接口中的功能

接口主要是java等語言中的概念,python中并沒有明確的限定

from abc import ABCMeta,abstractmethod
class Payment(metaclass=ABCMeta):
  @abstractmethod
  def pay(self,money):
    pass
class Wechatpay(Payment):
  def fuqian(self,money):
    print('微信支付了%s元'%money)
p = Wechatpay() #不調就報錯了

抽象類

什么是抽象類

與java一樣,python也有抽象類的概念但是同樣需要借助模塊實現,抽象類是一個特殊的類,它的特殊之處在于只能被繼承,不能被實例化

為什么要有抽象類

如果說類是從一堆對象中抽取相同的內容而來的,那么抽象類就是從一堆類中抽取相同的內容而來的,內容包括數據屬性和函數屬性。

 比如我們有香蕉的類,有蘋果的類,有桃子的類,從這些類抽取相同的內容就是水果這個抽象的類,你吃水果時,要么是吃一個具體的香蕉,要么是吃一個具體的桃子。。。。。。你永遠無法吃到一個叫做水果的東西。

從設計角度去看,如果類是從現實對象抽象而來的,那么抽象類就是基于類抽象而來的。

從實現角度來看,抽象類與普通類的不同之處在于:抽象類中只能有抽象方法(沒有實現功能),該類不能被實例化,只能被繼承,且子類必須實現抽象方法。這一點與接口有點類似,但其實是不同的,即將揭曉答案

在python中實現抽象類

import abc #利用abc模塊實現抽象類
class All_file(metaclass=abc.ABCMeta):
  all_type='file'
  @abc.abstractmethod #定義抽象方法,無需實現功能
  def read(self):
    '子類必須定義讀功能'
    pass
  @abc.abstractmethod #定義抽象方法,無需實現功能
  def write(self):
    '子類必須定義寫功能'
    pass
# class Txt(All_file):
#   pass
#
# t1=Txt() #報錯,子類沒有定義抽象方法
class Txt(All_file): #子類繼承抽象類,但是必須定義read和write方法
  def read(self):
    print('文本數據的讀取方法')
  def write(self):
    print('文本數據的讀取方法')
class Sata(All_file): #子類繼承抽象類,但是必須定義read和write方法
  def read(self):
    print('硬盤數據的讀取方法')
  def write(self):
    print('硬盤數據的讀取方法')
class Process(All_file): #子類繼承抽象類,但是必須定義read和write方法
  def read(self):
    print('進程數據的讀取方法')
  def write(self):
    print('進程數據的讀取方法')
wenbenwenjian=Txt()
yingpanwenjian=Sata()
jinchengwenjian=Process()
#這樣大家都是被歸一化了,也就是一切皆文件的思想
wenbenwenjian.read()
yingpanwenjian.write()
jinchengwenjian.read()
print(wenbenwenjian.all_type)
print(yingpanwenjian.all_type)
print(jinchengwenjian.all_type)

抽象類與接口類

抽象類的本質還是類,指的是一組類的相似性,包括數據屬性(如all_type)和函數屬性(如read、write),而接口只強調函數屬性的相似性。

抽象類是一個介于類和接口直接的一個概念,同時具備類和接口的部分特性,可以用來實現歸一化設計

在python中,并沒有接口類這種東西,即便不通過專門的模塊定義接口,我們也應該有一些基本的概念。

1. 多繼承問題

在繼承抽象類的過程中,我們應該盡量避免多繼承;
而在繼承接口的時候,我們反而鼓勵你來多繼承接口

接口隔離原則:

使用多個專門的接口,而不使用單一的總接口。即客戶端不應該依賴那些不需要的接口。

2. 方法的實現

在抽象類中,我們可以對一些抽象方法做出基礎實現;
而在接口類中,任何方法都只是一種規范,具體的功能需要子類實現

多繼承遍歷順序:

  • 經典類:深度優先

  • 新式類:廣度優先

繼承的作用

  • 減少代碼的重用

  • 提高代碼可讀性

  • 規范編程模式

抽象類與接口類

1.多繼承問題

在繼承抽象類的過程中,我們應該盡量避免多繼承;
而在繼承接口的時候,我們反而鼓勵你來多繼承接口

2.方法的實現

在抽象類中,我們可以對一些抽象方法做出基礎實現;
而在接口類中,任何方法都只是一種規范,具體的功能需要子類實現

多態

多態指的是一類事物有多種形態

多態性

一 什么是多態動態綁定(在繼承的背景下使用時,有時也稱為多態性)

多態性是指在不考慮實例類型的情況下使用實例

多態性分為靜態多態性和動態多態性

  • 靜態多態性:如任何類型都可以用運算符+進行運算

  • 動態多態性:如下

peo=People()
dog=Dog()
pig=Pig()
#peo、dog、pig都是動物,只要是動物肯定有talk方法
#于是我們可以不用考慮它們三者的具體是什么類型,而直接使用
peo.talk()
dog.talk()
pig.talk()
#更進一步,我們可以定義一個統一的接口來使用
def func(obj):
  obj.talk()

鴨子類型

Python崇尚鴨子類型,即‘如果看起來像、叫聲像而且走起路來像鴨子,那么它就是鴨子'

python程序員通常根據這種行為來編寫程序。例如,如果想編寫現有對象的自定義版本,可以繼承該對象

也可以創建一個外觀和行為像,但與它無任何關系的全新對象,后者通常用于保存程序組件的松耦合度。

感謝各位的閱讀!關于“Python面向對象之接口、抽象類與多態的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

修水县| 卢龙县| 登封市| 洪洞县| 成武县| 曲周县| 普安县| 民县| 修文县| 安义县| 曲麻莱县| 柘城县| 泊头市| 芜湖市| 米脂县| 永清县| 莆田市| 龙里县| 广灵县| 栾城县| 浦县| 军事| 万全县| 古蔺县| 荆门市| 桂林市| 若羌县| 土默特左旗| 柞水县| 名山县| 阿拉善右旗| 伊金霍洛旗| 永修县| 高陵县| 班玛县| 子洲县| 莱芜市| 北辰区| 奉贤区| 福泉市| 岱山县|