抽象基类不强制执行函数

Jim*_*nts 5 python abstract-class python-3.x python-3.4

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()
Run Code Online (Sandbox Code Playgroud)

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

ele*_*ent 7

在Python 3中,元类 声明的语法已经改变.代替的__metaclass__字段,Python 3中使用一个关键字参数基类列表:

import abc

class AbstractBase(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def must_implement_this_method(self):
        raise NotImplementedError()
Run Code Online (Sandbox Code Playgroud)

调用现在d = ConcreteClass()引发异常,因为除非所有抽象方法和属性被覆盖,否则无法实例化派生的元类ABCMeta(有关更多信息,请参阅参考资料@abc.abstractmethod):

TypeError: Can't instantiate abstract class ConcreteClass with abstract methods
must_implement_this_method
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助 :)