实例化抽象类时没有错误,即使没有实现抽象方法

cod*_*ash 2 python abstract-class abc abstract python-3.x

我正在尝试下面的python代码:

from abc import ABCMeta, abstractmethod

class Bar:

    __metaclass__ = ABCMeta

    @abstractmethod
    def foo(self):
        pass


class Bar2(Bar):
    def foo2(self):
        print("Foo2")


b = Bar()
b2 = Bar2()
Run Code Online (Sandbox Code Playgroud)

我认为@abstractmethod确保我的父类是抽象的,子类也是抽象的,因为它没有实现抽象方法.但是在这里,我没有尝试实例化这两个类的错误.

有谁能解释为什么?

M.j*_*vid 5

您必须将类元类设置BarABCMeta.

Python 2:

class Bar:
    __metaclass__ = ABCMeta

    @abstractmethod
    def foo(self):
        pass
Run Code Online (Sandbox Code Playgroud)

Python 3:

class Bar(object, metaclass=ABCMeta):
    @abstractmethod
    def foo(self):
        pass
Run Code Online (Sandbox Code Playgroud)