python - 在抽象或协议类中抑制 doctest
问题描述
我希望对抽象(ABC
)或Protocol
类使用 doctest 格式的示例,而不会因为类的方法未实现而导致 doctest 失败。
文档字符串和示例应该反映抽象类的多个实现的一般用例,我想保持 doctest 格式以保持一致性。
任何抑制单个文档字符串或所有抽象或Protocol
类的文档测试的想法都值得赞赏。我知道我也可以将其编写为Sphinx 代码块,但在我看来,它在代码中不会像人类可读的那样。
例子:
from abc import ABC, abstractmethod
class MyABC(ABC):
"""My docstring.
Here is a recommended use case for this item:
Examples:
>>> a = MyABC()
>>> a.do_something()
'some expected behaviour'
"""
@abstractmethod
def do_something(self):
pass
class MyClass(MyABC):
def do_something(self):
return 'some expected behaviour'
注意我知道这张票有点重复,但我认为这个例子不相关,也没有得到回答。
解决方案
您的 doc 测试必须做与用户期望做的事情相同的事情:定义一个实现do_something
并实例化该类的子类。
class MyABC(ABC):
"""My docstring.
Here is a recommended use case for this item:
Examples:
>>> class Foo(MyABC):
... def do_something(self):
... return 'some expected behaviour'
...
>>> a = Foo()
>>> a.do_something()
'some expected behaviour'
"""
@abstractmethod
def do_something(self):
pass
推荐阅读
- asp.net-mvc - STRIPE API Payment Intent 支付不完整
- python - 如何在 Django 的另一个类模型中导入值?
- reactjs - immer 属性更改不会触发功能组件中的更新
- java - JLabel 没有显示任何内容
- tensorflow - 将主数据目录拆分为训练/验证/测试集
- r - 英国邮政编码区域的 shapefile 在 ReadOGR() 中出现突然错误
- c - fscanf 没有完全拆分文件
- javascript - 如果月份是 29,30,31 的 1 月,如何添加下一个订阅日期以避免 javascript 中 2 月的同一日期?
- python - Python pyautogui 属性错误显示鼠标位置
- php - 尝试更新作曲家但出现问题