我正在尝试围绕我编写的 api 制作一个超薄的 cli 包装器。似乎__doc__
dunder attr 是在导入时设置的。
>>> def foo():
... """
... doc
... """
... pass
...
>>> foo.__doc__
'\n\tdoc\n\t'
我发现我可以__doc__
在方法内更改
>>> def foo():
... foo.__doc__ = "new doc"
...
>>> foo.__doc__
>>> foo()
>>> foo.__doc__
'new doc'
但这需要运行该方法。
我正在编写一个点击工具,这允许file.py --help
打印文档。但是,因为这是一个瘦包装器,所以只要将它编辑__doc__
为与 doc 内部调用的任何方法相同就很好。
API.py
class FOO:
def bar():
"""
Some long doc string
"""
pass
剪贴画
import click
import API
@click.command()
def hello():
"""
not what I want
"""
hello.__doc__ = API.FOO.bar.__doc__
API.FOO.bar()
if __name__ == '__main__':
print(hello.__doc__)
hello()
print(API.FOO.bar.__doc__)
我得到以下...运行时 pyhton3.6 cli.py
not what I want
Some long doc string
当我跑 python3.6 cli.py --help
Usage: cli.py [OPTIONS]
not what I want
Options:
--help Show this message and exit.
有什么办法可以将导入方法中的文档字符串注入到click方法中吗?也许装饰器在导入时解析,但我不确定如何完成。谢谢。
如果您将 doc 更改实现为函数的装饰器,它将在导入时运行。
def change_doc(function):
function.__doc__="my text"
return function
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句