Python — abc module

今天,我們要講的是python的ABC 模組

這個模組是用來定義一個抽象類。具體的概要介紹可以瀏覽PEP 3119

register

首先註冊一個abc的虛擬子類

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

在虛擬基類中,你也可以忽略這個方法。

__subclasshook__ (subclass)

(這個方法必須定義)

檢查子類是否被確認為ABC的子類。你也可以自己訂製一個issubclass方法,這樣就不需要再調用register()了。這個方法可以返回Ture,False或NotImplemented。如果返回的是TRUE,這個子類就被認為是ABC的子類了。如果返回FALSE,這個子類就不被認為是ABC的子類。如果是NotImplemented 請檢查 子類的繼承關係和語法。

下面是一個實用的例子:

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 NotImplemented  MyIterable.register(Foo)