{{1}}
我在Python 3.4上。我想定义一个抽象基类,它定义一些需要由它的子类实现的函数。但是当子类没有实现函数时,Python不会引发NotImplementedError ...
答案 0 :(得分:7)
元类 声明的语法在Python 3中发生了变化。 在基类列表中使用关键字参数 而不是__metaclass__
字段:
import abc
class AbstractBase(metaclass=abc.ABCMeta):
@abc.abstractmethod
def must_implement_this_method(self):
raise NotImplementedError()
现在调用d = ConcreteClass()
将引发异常 ,因为从ABCMeta
派生的元类无法实例化,除非所有抽象方法和属性是重写 (有关详细信息,请参阅@abc.abstractmethod
):
TypeError: Can't instantiate abstract class ConcreteClass with abstract methods
must_implement_this_method
希望这会有所帮助:)