【发布时间】:2018-01-31 06:35:37
【问题描述】:
我有一个抽象类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
在提供的选项之间,最佳做法是什么?或者我应该有其他方法来处理这个问题吗?
【问题讨论】:
-
别忘了调用代码是可以的,即支持
super().foo()。
标签: python python-3.x metaclass abstract-methods