我有一个抽象类,Model
,有几个抽象方法,我应该在方法的主体中放什么?
-
回归
class Model(metaclass=ABCMeta): @abstractmethod def foo(self): return
-
一通
class Model(metaclass=ABCMeta): @abstractmethod def foo(self): pass
-
引发描述性错误
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
(正文中最好的东西是文档字符串。
那么你不需要pass
或return
或...
,因为隐式包含return None
- 并且文档字符串使这个结构在没有SyntaxError
的情况下"编译":
from abc import abstractmethod, ABCMeta
class Model(metaclass=ABCMeta):
@abstractmethod
def foo(self):
"""This method foos the model."""
然后,文档字符串应该解释对此方法的期望,以便用户和子类知道意图。