Python ABC(抽象基类)在不同版本中的使用区别

ABC,Abstract Base Class(抽象基类),主要定义了基本类和最基本的抽象方法,可以为子类定义共有的API,不需要具体实现。相当于是Java中的接口或者是抽象类。
抽象基类可以不实现具体的方法(当然也可以实现,只不过子类如果想调用抽象基类中定义的方法需要使用super())而是将其留给派生类实现。
然而在Python的2.x 和Python3.x 中抽象类的使用确有不同
本人就因为在2.x版本中运行3.x写法的代码,总是报错
Python ImportError: cannot import name ABC
最后才定位到这个原因
在Python3.4中,声明抽象基类最简单的方式是子类话abc.ABC;Python3.0到Python3.3,必须在class语句中使用metaclass=ABCMeta;Python2中使用__metaclass__=ABCMeta

Python2.x中

在类中引用__metaclass__ = ABCMeta
但在定义时不继承
abc 模块中没有ABC基类 只有 ABCMeta, abstractmethod

import sys                                                                                                                  
from abc import ABCMeta, abstractmethod                                         
                                                                             
class Base():                                                                 
 __metaclass__ = ABCMeta                                                     
 @abstractmethod                                                             
 def func(self):                                                             
     '''Implement in subclass'''   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值