说我有以下抽象类Foo:
import abc
class Foo(abc.ABC):
@abc.abstractmethod
def bar(self):
raise NotImplementedError
Run Code Online (Sandbox Code Playgroud)
我该怎么把这个bar方法放在身体里?
我看到了很多代码raise NotImplementedError,如上所示.但是,这似乎是多余的,因为任何未实现的子类bar都会引发TypeError: Can't instantiate abstract class Foo with abstract methods bar它实例化的时间.
将Pythonic bar留空是否如下:
import abc
class Foo(abc.ABC):
@abc.abstractmethod
def bar(self):
...
Run Code Online (Sandbox Code Playgroud)
这是在抽象基类的Python文档中所做的,但我不确定这只是占位符还是如何编写代码的实际示例.
如果bar只留下三个点(...),我应该何时使用NotImplementedError?
我偶然发现了Python的一个有趣且意想不到的功能:
def fun():
"""Foo’s docstring"""
Run Code Online (Sandbox Code Playgroud)
是一个有效的功能?根据PEP 257," docstring是一个字符串文字,作为模块,函数,类或方法定义中的第一个语句出现 ",这意味着文档字符串本身被视为一个语句?
我原以为这至少pass需要一个声明.上面的例子与Python Zen的"显然优于隐式" 相矛盾,因为pass状态是显式意图,而文档字符串则不然.
任何人都可以对意图有所了解吗?