我有一个示例代码,该示例代码将abc包用于python。我使用pip在笔记本电脑中安装了abc。在PATH中正确设置了到包文件夹的路由。
我得到的示例代码可以做到:
'从abc导入ABC,抽象方法'
如果尝试运行它,则会收到“ ImportError:无法导入名称ABC”。但是,如果我尝试仅导入“抽象方法”,则可以进行导入。
我还可以导入ABCMeta,而不能导入ABC。
'from abc import ABC'<-不起作用
'从abc导入ABCMeta,抽象方法'<-确实
它似乎在同一个软件包中,通过pip安装该软件包时没有收到错误消息。那么,为什么我可以导入“ ABCMeta”和“抽象方法”而不是“ ABC”?
答案 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):
这对我非常有帮助,我希望对其他人也有帮助。