Python 2.7.16中能否使用abc.ABC?为何导入会失败?
Python 2.X 可以使用 abc 模块,只是用法和 Python3 不同
Python 2.6 及以上版本确实内置了 abc 模块,并非无法使用。你遇到 ImportError: cannot import name ABC 的原因是:ABC 类是 Python 3.4 才新增到 abc 模块中的特性,Python 2.X 里根本没有这个类。
在 Python 2.7 中,要定义抽象类,需要通过指定元类为 abc.ABCMeta 的方式实现,而不是继承 ABC 基类。举个具体的写法示例:
import abc # 定义抽象类 class MyAbstractClass(object): __metaclass__ = abc.ABCMeta # 定义抽象方法 @abc.abstractmethod def required_method(self): """子类必须实现这个方法""" pass
另外,abstractmethod 在 Python 2.7 的 abc 模块中是存在的,你可以直接导入使用:
from abc import abstractmethod
总结一下:
- Python 2.X 支持
abc模块,可用于定义抽象类和抽象方法 - 不能用 Python3 的
from abc import ABC写法,需改用元类指定的方式 abstractmethod在 Python2.7 中可以正常导入使用
内容的提问来源于stack exchange,提问作者h8n2
相关产品推荐
相关产品推荐

