Python -- abc module

今天,咱們要講的是python的ABC 模塊
python

這個模塊是用來定義一個抽象類。具體的概要介紹能夠瀏覽PEP 3119ssh

register ide

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

  
  
  
  
  1. from abc import ABCMeta 
  2.  
  3. class MyABC: 
  4.     __metaclass__ = ABCMeta 
  5.  
  6. MyABC.register(tuple) 
  7.  
  8. assert issubclass(tuple, MyABC) 
  9. assert isinstance((), MyABC) 

在虛擬基類中,你也能夠忽略這個方法。繼承

__subclasshook__ (subclass)ci

這個方法必須定義get

檢查子類是否被確認爲ABC的子類。你也能夠本身定製一個issubclass方法,這樣就不須要再調用register()了。這個方法能夠返回Ture,False或NotImplemented。若是返回的是TRUE,這個子類就被認爲是ABC的子類了。若是返回FALSE,這個子類就不被認爲是ABC的子類。若是是NotImplemented 請檢查 子類的繼承關係和語法。
string

下面是一個實用的例子:it

 

  
  
  
  
  1. class Foo(object): 
  2.     def __getitem__(self, index): 
  3.         ... 
  4.     def __len__(self): 
  5.         ... 
  6.     def get_iterator(self): 
  7.         return iter(self
  8.  
  9. class MyIterable: 
  10.     __metaclass__ = ABCMeta 
  11.  
  12.     @abstractmethod 
  13.     def __iter__(self): 
  14.         while False
  15.             yield None 
  16.  
  17.     def get_iterator(self): 
  18.         return self.__iter__() 
  19.  
  20.     @classmethod 
  21.     def __subclasshook__(cls, C): 
  22.         if cls is MyIterable: 
  23.             if any("__iter__" in B.__dict__ for B in C.__mro__): 
  24.                 return True 
  25.         return NotImplemented 
  26.  
  27. MyIterable.register(Foo) 
相關文章
相關標籤/搜索