4

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

谁能解释为什么?

4

1 回答 1

7

您必须将类的元类设置BarABCMeta

蟒蛇2:

class Bar:
    __metaclass__ = ABCMeta

    @abstractmethod
    def foo(self):
        pass

蟒蛇 3:

class Bar(object, metaclass=ABCMeta):
    @abstractmethod
    def foo(self):
        pass
于 2015-02-24T05:43:09.577 回答