【发布时间】:2025-12-17 23:55:02
【问题描述】:
我们制作了一个库,它大量(通过继承)使用 numpy 的 MaskedArrays。但我想在不测试从 numpy 继承的方法的情况下运行 sphinx 的 make doctest,因为它们会导致大约 100 次失败。
这看起来像这样:
class _frommethod:
"""
Adapted from numpy.ma._frommethod
"""
def __init__(self, func_name):
self.__name__ = func_name
self.__doc__ = getattr(MaskedArray, func_name).__doc__
self.obj = None
def __get__(self, obj, objtype=None):
self.obj = obj
return self
def __call__(self, a, *args, **params):
# Get the method from the array (if possible)
method_name = self.__name__
method = getattr(a, method_name, None)
if method is not None:
return method(*args, **params)
# Still here ? Then a is not a MaskedArray
method = getattr(MaskedTimeData, method_name, None)
if method is not None:
return method(MaskedTimeData(a), *args, **params)
# Still here ? OK, let's call the corresponding np function
method = getattr(np, method_name)
现在我们的库也支持 numpy 的函数,所以我们使用:
min = _frommethod('min')
max = _frommethod('max')
...
如果我禁用self.__doc__ = getattr(MaskedArray, func_name).__doc__,make doctest 的故障就会消失。但我想保留继承的文档;这样用户仍然可以在 ipython 中使用mylibrary.min?。
有人知道如何防止 sphinx 执行这个“继承”的 doctests 吗?
【问题讨论】:
-
这个功能(你的解决方案)在哪里?它是狮身人面像扩展吗?也许我也想使用它。顺便说一句,您应该将您的解决方案作为答案发布,并将其标记为已解决,因为它适合您。
-
@bmu:我已经做了一个完整的答案,并添加了一个更完整的例子! (顺便说一句:你看过截屏视频吗?:))
标签: python numpy python-sphinx doctest