python - 将其他方法/函数/对象的文档字符串“移植”到类中的正确方法?
问题描述
这是我正在做的事情:
class Foo:
def __init__(self, **kwargs):
"""
docstring of Foo.
"""
self.sum = bar(**kwargs)
__init__.__doc__ += bar.__doc__
def bar(a, b):
"""
docstring of bar.
a: int
b: int
"""
print(a+b)
我想做的事:在bar
. 该类Foo
使用bar
. 我想避免重复的代码,例如,我想避免a: int
在Foo
. 因此,我试图通过添加该行bar
来“移植”(这是正确的术语吗?)的文档字符串。Foo
__init__.__doc__ += bar.__doc__
这是正确的方法吗?我在窃听吗?ImagineFoo
是 API 的一部分,而是bar
后台子程序。向用户显示文档字符串的正确bar
方法是什么?
解决方案
您需要先bar
定义Foo
. 在您当前的配置中,bar
执行类主体时,全局命名空间中不存在该名称。
您可以考虑在文档之间添加换行符或某种分隔符:
__init__.__doc__ += '\n' + bar.__doc__
很少直接从文档字符串中读取文档。更好的答案是使用像sphinx这样的工具来生成 HTML 或 PDF 等格式的可用文档。您可以链接到它,bar
而不是将 的文档复制并粘贴到 的文档中。Foo.__init__
这样做的好处是您不需要重新排列全局命名空间中的对象。
流行的绘图库matplotlib是您的确切用例的一个很好的例子。它有很多函数,比如matplotlib.pyplot.subplots
,它通过剩余的参数 ( fig_kw
) 到matplotlib.pyplot.figure
。查看docstring的源代码,我们看到:
**fig_kw All additional keyword arguments are passed to the `.pyplot.figure` call.
反引号在 sphinx 中生成链接。Foo.__init__
您可以以类似的方式编写文档字符串:
"""
docstring of Foo.
Parameters
----------
**kwargs
Arguments passed through to `bar`.
"""
推荐阅读
- kotlin - 我可以在 kotlin 中始终使用私有集而不是私有 val 吗?
- c# - Xamarin Plugin.BLE 为什么读取的数据不会改变?
- python - 如何使用 python PIL 创建有两种颜色的图像?
- javascript - 在 react-redux 的 eshop 中添加数量
- azure - Azure 二头肌将存储帐户连接字符串传递给 Secret Keyvault 循环问题
- ruby-on-rails - 如何在 graphiql-rails gem 中启用 header_editor_enable?
- javascript - 有没有办法从 querySelectorAll() 中聚焦元素?
- c - 如何在两个指针之间打印字符串?
- python - ValueError: `decode_predictions` 需要一批预测(即形状的二维数组(样本,1000))。找到具有形状的数组:(1, 4)
- firebase - 将数据从 Firestore 数据库发送到电报