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

No error while instantiating abstract class, even though abstract method is not implemented

我正在尝试下面的 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()

我认为 @abstractmethod 将确保我的父对象 class 是抽象的,而子对象 class 也将是抽象的,因为它没有实现抽象方法。但是在这里,我在尝试实例化两个 classes 时没有出错。

谁能解释为什么?

您必须Barclass的元class设置为ABCMeta

Python 2:

class Bar:
    __metaclass__ = ABCMeta

    @abstractmethod
    def foo(self):
        pass

Python 3:

class Bar(object, metaclass=ABCMeta):
    @abstractmethod
    def foo(self):
        pass