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

Python面向對象之接口、抽象類與多態(tài)詳解

 更新時間:2018年08月27日 12:08:13   作者:—super—  
這篇文章主要介紹了Python面向對象之接口、抽象類與多態(tài),結合實例形式詳細分析了Python面向對象中接口、抽象類及多態(tài)的概念、用法及相關操作注意事項,需要的朋友可以參考下

本文實例講述了Python面向對象之接口、抽象類與多態(tài)。分享給大家供大家參考,具體如下:

接口類

繼承有兩種用途:

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

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

接口主要是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() #不調(diào)就報錯了

抽象類

什么是抽象類

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

為什么要有抽象類

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

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

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

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

在python中實現(xiàn)抽象類

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

抽象類與接口類

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

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

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

1. 多繼承問題

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

接口隔離原則:

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

2. 方法的實現(xiàn)

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

多繼承遍歷順序:

  • 經(jīng)典類:深度優(yōu)先
  • 新式類:廣度優(yōu)先

繼承的作用

  • 減少代碼的重用
  • 提高代碼可讀性
  • 規(guī)范編程模式

抽象類與接口類

1.多繼承問題

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

2.方法的實現(xiàn)

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

多態(tài)

多態(tài)指的是一類事物有多種形態(tài)

多態(tài)性

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

多態(tài)性是指在不考慮實例類型的情況下使用實例

多態(tài)性分為靜態(tài)多態(tài)性和動態(tài)多態(tài)性

  • 靜態(tài)多態(tài)性:如任何類型都可以用運算符+進行運算
  • 動態(tài)多態(tài)性:如下
peo=People()
dog=Dog()
pig=Pig()
#peo、dog、pig都是動物,只要是動物肯定有talk方法
#于是我們可以不用考慮它們?nèi)叩木唧w是什么類型,而直接使用
peo.talk()
dog.talk()
pig.talk()
#更進一步,我們可以定義一個統(tǒng)一的接口來使用
def func(obj):
  obj.talk()

鴨子類型

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

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

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

更多關于Python相關內(nèi)容感興趣的讀者可查看本站專題:《Python面向對象程序設計入門與進階教程》、《Python數(shù)據(jù)結構與算法教程》、《Python函數(shù)使用技巧總結》、《Python字符串操作技巧匯總》、《Python編碼操作技巧總結》及《Python入門與進階經(jīng)典教程

希望本文所述對大家Python程序設計有所幫助。

相關文章

  • 用tensorflow實現(xiàn)彈性網(wǎng)絡回歸算法

    用tensorflow實現(xiàn)彈性網(wǎng)絡回歸算法

    這篇文章主要介紹了用tensorflow實現(xiàn)彈性網(wǎng)絡回歸算法
    2018-01-01
  • Pytorch建模過程中的DataLoader與Dataset示例詳解

    Pytorch建模過程中的DataLoader與Dataset示例詳解

    這篇文章主要介紹了Pytorch建模過程中的DataLoader與Dataset,同時PyTorch針對不同的專業(yè)領域,也提供有不同的模塊,例如?TorchText,?TorchVision,?TorchAudio,這些模塊中也都包含一些真實數(shù)據(jù)集示例,本文給大家介紹的非常詳細,需要的朋友參考下吧
    2023-01-01
  • Python Scrapy框架:通用爬蟲之CrawlSpider用法簡單示例

    Python Scrapy框架:通用爬蟲之CrawlSpider用法簡單示例

    這篇文章主要介紹了Python Scrapy框架:通用爬蟲之CrawlSpider用法,結合實例形式分析了Scrapy框架中CrawlSpider的基本使用方法,需要的朋友可以參考下
    2020-04-04
  • Python xlrd讀取excel日期類型的2種方法

    Python xlrd讀取excel日期類型的2種方法

    這篇文章主要介紹了Python xlrd讀取excel日期類型的2種方法,本文同時講解了xlrd讀取excel某個單元格的方法,需要的朋友可以參考下
    2015-04-04
  • 簡單了解python模塊概念

    簡單了解python模塊概念

    這篇文章主要介紹了簡單了解python模塊概念,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • PyTorch中torch.cuda.amp相關警告的解決方法

    PyTorch中torch.cuda.amp相關警告的解決方法

    在最近的寫代碼過程中,遇到了兩個與 PyTorch 的混合精度訓練相關的警告信息,torch.cuda.amp.autocast和torch.cuda.amp.GradScaler,文中通過代碼示例給大家介紹了詳細的解決方法,需要的朋友可以參考下
    2025-02-02
  • Python的SQLAlchemy框架使用入門

    Python的SQLAlchemy框架使用入門

    這篇文章主要介紹了Python的SQLAlchemy框架使用入門,SQLAlchemy框架是Python中用來操作數(shù)據(jù)庫的ORM框架之一,需要的朋友可以參考下
    2015-04-04
  • Django3.0 異步通信初體驗(小結)

    Django3.0 異步通信初體驗(小結)

    這篇文章主要介紹了Django3.0 異步通信初體驗,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • Pandas:DataFrame對象的基礎操作方法

    Pandas:DataFrame對象的基礎操作方法

    今天小編就為大家分享一篇Pandas:DataFrame對象的基礎操作方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • python判斷all函數(shù)輸出結果是否為true的方法

    python判斷all函數(shù)輸出結果是否為true的方法

    在本篇內(nèi)容里小編給各位整理的是一篇關于python判斷all函數(shù)輸出結果是否為true的方法,有需要的朋友們可以學習下。
    2020-12-12

最新評論

化州市| 云安县| 元朗区| 梅州市| 那坡县| 织金县| 比如县| 永仁县| 南江县| 枣阳市| 浦城县| 元氏县| 富民县| 万州区| 康平县| 陇川县| 会同县| 怀来县| 安塞县| 东乡县| 时尚| 内乡县| 海伦市| 尼玛县| 龙泉市| 神木县| 永和县| 红河县| 土默特左旗| 灵宝市| 洛川县| 宜兰市| 宁波市| 赤壁市| 永平县| 银川市| 和林格尔县| 广东省| 宿松县| 郯城县| 芜湖市|