实例化抽象 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 时没有出错。
谁能解释为什么?
您必须将Bar
class的元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
我正在尝试下面的 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 时没有出错。
谁能解释为什么?
您必须将Bar
class的元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