为什么我无法导入 ABC 但 ABCMeta 已正确导入?

Why I cant import ABC but ABCMeta is correctly imported?

我得到了使用 python 的 abc 包的示例代码。我使用 pip 在我的笔记本电脑上安装了 abc。在 PATH 中正确设置了包文件夹的路径。

我得到的示例代码是:

'from abc import ABC, abstractmethod'

如果我尝试 运行,我得到了 'ImportError: cannot import name ABC'。但是,如果我尝试仅导入 'abstractmethod',则导入有效。

我也可以导入 ABCMeta,只是不能导入 ABC。

'from abc import ABC' <- 不工作

'from abc import ABCMeta, abstractmethod' <-确实如此

好像是在同一个包里,我用pip安装包的时候没有报错。那么,为什么我可以导入 'ABCMeta' 和 'abstractmethod' 但不能导入 'ABC'?

abc.ABC 已在 Python 3.4 中引入。
因此,您应该使用 ≥ 3.4 的版本来 运行 代码。

bpo-16049: Add abc.ABC class to enable the use of inheritance to create ABCs, rather than the more cumbersome metaclass=ABCMeta. Patch by Bruno Dupuis.

我在这里找到了我要找的东西:

http://www.programmersought.com/article/7351237937/

基本上,在 python 2.7(这是我必须使用的版本,因为老板的原因)你改用 ABCMeta 并将你的 class 设置为从 ABCMeta 继承,如:

from abc import ABCMeta, abstractmethod                                         

class MyBase():                                                                 
    __metaclass__ = ABCMeta                                                     
    @abstractmethod                                                             
    def func(self):                                                             

这对我很有帮助,我希望对其他人也有帮助。