今天,咱們要講的是python的ABC 模塊
python
這個模塊是用來定義一個抽象類。具體的概要介紹能夠瀏覽PEP 3119。ssh
register ide
首先註冊一個abc的虛擬子類spa
- from abc import ABCMeta
- class MyABC:
- __metaclass__ = ABCMeta
- MyABC.register(tuple)
- assert issubclass(tuple, MyABC)
- assert isinstance((), MyABC)
在虛擬基類中,你也能夠忽略這個方法。繼承
__subclasshook__ (subclass)ci
(這個方法必須定義)get
檢查子類是否被確認爲ABC的子類。你也能夠本身定製一個issubclass方法,這樣就不須要再調用register()了。這個方法能夠返回Ture,False或NotImplemented。若是返回的是TRUE,這個子類就被認爲是ABC的子類了。若是返回FALSE,這個子類就不被認爲是ABC的子類。若是是NotImplemented 請檢查 子類的繼承關係和語法。
string
下面是一個實用的例子:it
- 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)