Python 3.5 中的抽象方法主体



我有一个抽象类,Model,有几个抽象方法,我应该在方法的主体中放什么?

  1. 回归

    class Model(metaclass=ABCMeta):
    @abstractmethod
    def foo(self):
    return
    
  2. 一通

    class Model(metaclass=ABCMeta):
    @abstractmethod
    def foo(self):
    pass
    
  3. 引发描述性错误

    class Model(metaclass=ABCMeta):
    @abstractmethod
    def foo(self):
    raise NotImplementedError("Class {class_name} doesn't implement {func_name} function"
    .format(class_name=self.__class__.__name__, func_name=self.foo.__name__))
    

通常我会实现方法 3 并引发错误,但它看起来是多余的,因为 Python 为我引发错误:

>>> bar = module.Model()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Can't instantiate abstract class Model with abstract methods foo

在呈现的选项之间,哪个是最佳实践?还是我应该有另一种处理方式?

放入abstractmethod(或abstractproperty(正文中最好的东西是文档字符串。

那么你不需要passreturn...,因为隐式包含return None- 并且文档字符串使这个结构在没有SyntaxError的情况下"编译":

from abc import abstractmethod, ABCMeta
class Model(metaclass=ABCMeta):
@abstractmethod
def foo(self):
"""This method foos the model."""

然后,文档字符串应该解释对此方法的期望,以便用户和子类知道意图。

最新更新