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

时间:2015-02-24 05:31:09

标签: python python-3.x abstract-class abstract abc

我正在尝试下面的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确保我的父类是抽象的,而子类也是抽象的,因为它没有实现抽象方法。但是在这里,我没有尝试实例化这两个类的错误。

任何人都可以解释原因吗?

1 个答案:

答案 0 :(得分:5)

您必须Bar类的元类设置为ABCMeta

Python 2:

class Bar:
    __metaclass__ = ABCMeta

    @abstractmethod
    def foo(self):
        pass

Python 3:

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