學習Python的ABC模組(轉)

來源:互聯網
上載者:User

標籤:false   學習   meta   imp   基礎   讀寫   instance   import   hook   

http://yansu.org/2013/06/09/learn-Python-abc-module.html

 

1.abc模組作用

Python本身不提供抽象類別和介面機制,要想實現抽象類別,可以藉助abc模組。ABC是Abstract Base Class的縮寫。

2.模組中的類和函數abc.ABCMeta

這是用來產生抽象基礎類的元類。由它產生的類可以被直接繼承。

from abc import ABCMetaclass MyABC:    __metaclass__ = ABCMetaMyABC.register(tuple)assert issubclass(tuple, MyABC)assert isinstance((), MyABC)

上面這個例子中,首先產生了一個MyABC的抽象基礎類,然後再將tuple變成它的虛擬子類。然後通過issubclass或者isinstance都可以判斷出tuple是不是出於MyABC類。

另外,也可以通過複寫__subclasshook__(subclass)來實現相同功能,它必須是classmethod

class Foo(object):    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 NotImplementedMyIterable.register(Foo)
abc.abstractmethod(function)

表明抽象方法的產生器

class C:    __metaclass__ = ABCMeta    @abstractmethod    def my_abstract_method(self, ...):        ...
abc.abstractproperty([fget[,fset[,fdel[,doc]]]])

表明一個抽象屬性

class C:    __metaclass__ = ABCMeta    @abstractproperty    def my_abstract_property(self):        ...

上例只是唯讀屬性,如果是讀寫屬性,可以如下:

class C:    __metaclass__ = ABCMeta    def getx(self): ...    def setx(self, value): ...    x = abstractproperty(getx, setx)

學習Python的ABC模組(轉)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.