Python -- abc module

今天,我们要讲的是python的ABC 模块

这个模块是用来定义一个抽象类。具体的概要介绍可以浏览PEP 3119

register

首先注册一个abc的虚拟子类

  
  
  
  
  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)

这个方法必须定义

检查子类是否被确认为ABC的子类。你也可以自己定制一个issubclass方法,这样就不需要再调用register()了。这个方法可以返回Ture,False或NotImplemented。如果返回的是TRUE,这个子类就被认为是ABC的子类了。如果返回FALSE,这个子类就不被认为是ABC的子类。如果是NotImplemented 请检查 子类的继承关系和语法。

下面是一个实用的例子:

 

  
  
  
  
  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) 

 

你可能感兴趣的:(python,学习,职场,模块,休闲)