为什么我不能导入ABC但正确导入了ABCMeta?

时间:2019-06-18 21:07:17

标签: python abc

我有一个示例代码,该示例代码将abc包用于python。我使用pip在笔记本电脑中安装了abc。在PATH中正确设置了到包文件夹的路由。

我得到的示例代码可以做到:

'从abc导入ABC,抽象方法'

如果尝试运行它,则会收到“ ImportError:无法导入名称ABC”。但是,如果我尝试仅导入“抽象方法”,则可以进行导入。

我还可以导入ABCMeta,而不能导入ABC。

'from abc import ABC'<-不起作用

'从abc导入ABCMeta,抽象方法'<-确实

它似乎在同一个软件包中,通过pip安装该软件包时没有收到错误消息。那么,为什么我可以导入“ ABCMeta”和“抽象方法”而不是“ ABC”?

2 个答案:

答案 0 :(得分:1)

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

  

bpo-16049 :添加abc.ABC类以允许使用继承来创建ABC,而不是笨重的metaclass = ABCMeta。 Bruno Dupuis修补。

答案 1 :(得分:0)

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

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

基本上,在python 2.7(由于上司的原因,我必须使用该版本)中,您改用ABCMeta,并将类设置为从ABCMeta继承,如:

from abc import ABCMeta, abstractmethod                                         

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

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