【问题标题】:Why I cant import ABC but ABCMeta is correctly imported?为什么我无法导入 ABC 但正确导入了 ABCMeta?
【发布时间】:2019-11-01 13:36:49
【问题描述】:

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

我得到的示例代码是这样的:

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

如果我尝试运行它,我会收到“ImportError: cannot import name ABC”。但是,如果我尝试仅导入“抽象方法”,则导入有效。

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

'从 abc 导入 ABC'

'from abc import ABCMeta, abstractmethod'

它似乎在同一个包中,我通过 pip 安装包时没有收到错误消息。那么,为什么我可以导入 'ABCMeta' 和 'abstractmethod' 而不是 'ABC'?

【问题讨论】:

    标签: python abc


    【解决方案1】:

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

    bpo-16049:添加 abc.ABC 类以启用使用继承创建 ABC,而不是更繁琐的 metaclass=ABCMeta。 Bruno Dupuis 的补丁。

    【讨论】:

      【解决方案2】:

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

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

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

      from abc import ABCMeta, abstractmethod                                         
      
      class MyBase():                                                                 
          __metaclass__ = ABCMeta                                                     
          @abstractmethod                                                             
          def func(self):                                                             
      

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

      【讨论】:

      • 我在 mac os mojave 上使用 python 3.9 但我仍然遇到同样的问题,,,解决方案是什么。
      猜你喜欢
      • 1970-01-01
      • 2022-12-14
      • 2020-08-16
      • 1970-01-01
      • 2021-12-11
      • 1970-01-01
      • 2021-12-30
      • 1970-01-01
      • 2022-01-26
      相关资源
      最近更新 更多