Sha*_*ayn 10 python metaclass abstract-methods python-3.x
我有一个抽象类,Model
有一些抽象方法,我应该在方法体中放入什么?
回报
class Model(metaclass=ABCMeta):
@abstractmethod
def foo(self): return
Run Code Online (Sandbox Code Playgroud)通过
class Model(metaclass=ABCMeta):
@abstractmethod
def foo(self): pass
Run Code Online (Sandbox Code Playgroud)提出描述性错误
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__))
Run Code Online (Sandbox Code Playgroud)通常我会实现方法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
Run Code Online (Sandbox Code Playgroud)
在提出的选项之间,哪个是最佳实践?或者还有另一种方法我应该处理这个问题吗?
MSe*_*ert 16
放入abstractmethod
(或abstractproperty
)主体的最好的东西是文档字符串.
然后,你不需要pass
或者return
还是...
因为return None
被隐式包括-和文档字符串使得这个结构"编译"没有SyntaxError
:
from abc import abstractmethod, ABCMeta
class Model(metaclass=ABCMeta):
@abstractmethod
def foo(self):
"""This method should implement how to foo the model."""
Run Code Online (Sandbox Code Playgroud)
然后docstring应该解释这里应该实现什么,以便子类知道什么是/意图.
归档时间: |
|
查看次数: |
1660 次 |
最近记录: |