首页 > 解决方案 > 以旧方式抽象类是行不通的

问题描述

我正在尝试创建一个抽象基类。当使用 python 3 的语法时,它可以完美地工作。但是当我切换到 python 2.7 的语法时,它就不起作用了。

下面的代码是用 2.7 语法编写的,如果我运行它,它会工作,当它不应该工作时,类中没有foo方法StillAbstract

from abc import ABCMeta, abstractmethod


class Abstract:
    __metaclass__ = ABCMeta

    @abstractmethod
    def foo(self):
        pass


class StillAbstract(Abstract):
    pass


if __name__ == '__main__':
    a = StillAbstract()

但是,当我用 3+ 语法编写它时,它按应有的方式工作,但由于抽象基类给出的错误而失败。

from abc import ABCMeta, abstractmethod


class Abstract(metaclass=ABCMeta):

    @abstractmethod
    def foo(self):
        pass


class StillAbstract(Abstract):
    pass


if __name__ == '__main__':
    a = StillAbstract()

知道为什么它会这样工作吗?

标签: pythonabc

解决方案


推荐阅读