说我有以下抽象类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
状态是显式意图,而文档字符串则不然.
任何人都可以对意图有所了解吗?