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

12 浏览
0 Comments

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

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

有人能解释一下为什么吗?

admin 更改状态以发布 2023年5月21日
0
0 Comments

您必须将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

0