抽象基类不强制执行函数

时间:2015-07-03 08:05:54

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

{{1}}

我在Python 3.4上。我想定义一个抽象基类,它定义一些需要由它的子类实现的函数。但是当子类没有实现函数时,Python不会引发NotImplementedError ...

1 个答案:

答案 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

希望这会有所帮助:)