关于python:抽象基类不强制执行函数

Abstract base class is not enforcing function implementation

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from abc import abstractmethod, ABCMeta

class AbstractBase(object):
  __metaclass__ = ABCMeta

  @abstractmethod
  def must_implement_this_method(self):
      raise NotImplementedError()

class ConcreteClass(AbstractBase):

   def extra_function(self):
       print('hello')

   # def must_implement_this_method(self):
     # print("Concrete implementation")


d = ConcreteClass()  # no error
d.extra_function()

我在python 3.4上。我想定义一个抽象基类,它定义一些需要由它的子类实现的函数。但当子类不实现函数时,python不会引发notimplementederror…


在python 3中,元类声明的语法已经更改。而不是__metaclass__字段,python 3在基类列表中使用关键字参数:

1
2
3
4
5
6
import abc

class AbstractBase(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def must_implement_this_method(self):
        raise NotImplementedError()

调用d = ConcreteClass()将立即引发异常,因为除非重写了从ABCMeta派生的元类的所有抽象方法和属性,否则无法实例化该元类(有关详细信息,请参阅@abc.abstractmethod)。

1
2
TypeError: Can't instantiate abstract class ConcreteClass with abstract methods
must_implement_this_method

希望这有帮助:)