ABC 是一些不能被实例化的类。Python 3 添加了一个新的框架 —abc— 它提供了对 ABC 的支持。这个 abc 模块具有一个元类(ABCMeta
)和 修饰符(@abstractmethod
和 @abstractproperty
)。如果一个 ABC 具有一个 @abstractmethod
或 @abstractproperty
,它就不能被实例化,但必须在一个子类内被覆盖。比如,如下代码:
#-*- coding:utf-8 -*- from abc import ABCMeta,abstractmethod #抽象类 class A(object): __metaclass__ = ABCMeta @abstractmethod def fun(self):pass @abstractmethod def _f(self):pass # @abstractmethod 私有方法不能是抽象方法 def __f(self): pass #实现类 class B(A): def fun(self,name): print 'B for %s'%name def _f(self,name): print 'B for %s'%name def __f(self,name): return 'B for %s'%name def do(self,name): print self.__f(name) #a=A() 抽象类无法实例化 b=B() b.fun('ybf') b.fun('yyj') #b.__f() 无法调用 b.do('ybf&yyj')
输出:
B for ybf
B for yyj
B for ybf&yyj
如果子类不实现父类的方法,则会报错。如果不清楚_、__、__xx__的差别,看这里:python _、__、__xx__之间的差别。