国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Python模塊文檔學習之抽象基類abc模塊

lauren_liuling / 754人閱讀

摘要:里面關于抽象類的相關介紹中并沒有提供抽象類與抽象方法,但是提供了內(nèi)置模塊來模擬實現(xiàn)抽象類。主要類或函數(shù)這是用來生成抽象基礎類的元類。繼承方式中的抽象類模塊定義了幾個抽象類。

PEP里面關于抽象類的相關介紹:https://www.python.org/dev/pe...
python中并沒有提供抽象類與抽象方法,但是提供了內(nèi)置模塊abc(abstract base class)來模擬實現(xiàn)抽象類。
主要類或函數(shù):
abc.ABCMeta 這是用來生成抽象基礎類的元類。由它生成的類可以被直接繼承。
abc.ABC輔助類,讓你可以不用關心元類概念,直接繼承它,就有了ABCMeta元類。使用時注意元類沖突
@abc.abstractmethod 定義抽象方法,除了這個裝飾器,其余裝飾器都被deprecated了。

from abc import ABCMeta

class MyABC(metaclass=ABCMeta):
    pass

MyABC.register(tuple)

assert issubclass(tuple, MyABC)
assert isinstance((), MyABC)

上面這個例子中,首先生成了一個MyABC的抽象基礎類,然后再將tuple變成它的虛擬子類。然后通過issubclass或者isinstance都可以判斷出tuple是不是出于MyABC類。
另外,也可以通過復寫__subclasshook__(subclass)來改變issubclass或者isinstance的行為,__subclasshook__(subclass)必須定義為classmethod

class Foo:
    def __getitem__(self, index):
        ...
    def __len__(self):
        ...
    def get_iterator(self):
        return iter(self)

class MyIterable(metaclass=ABCMeta):

    @abstractmethod
    def __iter__(self):
        while False:
            yield None

    def get_iterator(self):
        return self.__iter__()

    @classmethod
    def __subclasshook__(cls, C):
        if cls is MyIterable:
            if any("__iter__" in B.__dict__ for B in C.__mro__):
                return True
        return NotImplemented

MyIterable.register(Foo)

通過@abc.abstractmethod將方法聲明為抽象方法。
具體化抽象類可以有兩種方式,一種通過注冊(register),另外一種通過繼承。
上面介紹的是注冊方式,
注冊方式的缺點:不會出現(xiàn)在類的MRO (Method Resolution Order),故而也不能通過super()來調(diào)用抽象方法。當沒有實現(xiàn)抽象方法時,實例化時候不會報錯,只有在調(diào)用時候才會報錯。

下面介紹繼承方式:
繼承方式的優(yōu)點:直接從抽象基類派生子類有一個好處,除非子類實現(xiàn)抽象基類的抽象方法,否則子類不能實例化。

繼承方式:

import abc

class PluginBase(metaclass= abc.ABCMeta):
    #__metaclass__ = abc.ABCMeta
    
    @abc.abstractmethod
    def load(self, input):
        """Retrieve data from the input source and return an object."""
        return
    
    @abc.abstractmethod
    def save(self, output, data):
        """Save the data object to the output."""
        return
        
class SubclassImplementation(PluginBase):
    
    def load(self, input):
        return input.read()
    
    def save(self, output, data):
        return output.write(data)
 
if __name__ == "__main__":
    print "Subclass:", issubclass(SubclassImplementation, PluginBase)
    print "Instance:", isinstance(SubclassImplementation(), PluginBase)
collections中的抽象類

collections.abc模塊定義了幾個抽象類。
具體請看文檔。

參考:
https://docs.python.org/3/lib...
https://www.python.org/dev/pe...
https://my.oschina.net/u/2253...
http://yansu.org/2013/06/09/l...
http://www.cnblogs.com/Securi...

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/38300.html

相關文章

  • Python基礎之接口——從協(xié)議到抽象基類

    摘要:本文重點協(xié)議是中非正式的接口了解抽象基類的基本概念以及標準庫中的抽象基類掌握抽象基類的使用方法。三抽象基類的使用通過繼承聲明抽象基類聲明抽象基類最簡單的方式是繼承或其他抽象基類注意在之間,繼承抽象基類的語法是。 導語:本文章記錄了本人在學習Python基礎之面向對象篇的重點知識及個人心得,打算入門Python的朋友們可以來一起學習并交流。 本文重點: 1、協(xié)議是Python中非正式的接...

    TwIStOy 評論0 收藏0
  • Python習之路30-接口:從協(xié)議到抽象基類

    摘要:本篇內(nèi)容將從鴨子類型的動態(tài)協(xié)議,逐漸過渡到使接口更明確能驗證實現(xiàn)是否符合規(guī)定的抽象基類。抽象基類介紹完動態(tài)實現(xiàn)接口后,現(xiàn)在開始討論抽象基類,它屬于靜態(tài)顯示地實現(xiàn)接口。標準庫中的抽象基類從開始,標準庫提供了抽象基類。 《流暢的Python》筆記。本篇是面向對象慣用方法的第四篇,主要討論接口。本篇內(nèi)容將從鴨子類型的動態(tài)協(xié)議,逐漸過渡到使接口更明確、能驗證實現(xiàn)是否符合規(guī)定的抽象基類(Abst...

    LucasTwilight 評論0 收藏0
  • 流暢的python讀書筆記-第11章-接口:從協(xié)議到抽象基類

    摘要:自己定義的抽象基類要繼承。抽象基類可以包含具體方法。這里想表達的觀點是我們可以偷懶,直接從抽象基類中繼承不是那么理想的具體方法。 抽象基類 抽象基類的常見用途: 實現(xiàn)接口時作為超類使用。 然后,說明抽象基類如何檢查具體子類是否符合接口定義,以及如何使用注冊機制聲明一個類實現(xiàn)了某個接口,而不進行子類化操作。 如何讓抽象基類自動識別任何符合接口的類——不進行子類化或注冊。 接口在動態(tài)類...

    Kyxy 評論0 收藏0
  • python標準庫習之zipfile模塊

    摘要:模塊里有兩個非常重要的分別是和。返回一個對象,它包括文件的詳細信息。將文檔內(nèi)的指定文件解壓到當前目錄。為文件路徑,為添加到文檔之后保存的名稱參數(shù)表示壓縮方法,它的值可以是或。預留字段,當前實現(xiàn)總是返回。 ZipFile模塊里有兩個非常重要的class, 分別是 ZipFile和ZipInfo。ZipFile是主要的類,用來創(chuàng)建和讀取zip文件,而ZipInfo是存儲的zip文件的每個文...

    Magicer 評論0 收藏0
  • Python習之路25-使用一等函數(shù)實現(xiàn)設計模式

    摘要:本篇主要講述中使用函數(shù)來實現(xiàn)策略模式和命令模式,最后總結出這種做法背后的思想。 《流暢的Python》筆記。本篇主要講述Python中使用函數(shù)來實現(xiàn)策略模式和命令模式,最后總結出這種做法背后的思想。 1. 重構策略模式 策略模式如果用面向對象的思想來簡單解釋的話,其實就是多態(tài)。父類指向子類,根據(jù)子類對同一方法的不同重寫,得到不同結果。 1.1 經(jīng)典的策略模式 下圖是經(jīng)典的策略模式的U...

    econi 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<