Python文档字符串能够进行计算吗(使用f-string或%表达式)?

19

是否可以计算Python文档字符串?我的文档字符串中有很多重复的内容,因此我想要使用f-strings或%-style格式表达式。

当我在文档字符串位置使用f-string时:

  • 导入模块会调用处理过程
  • 但当我检查这样一个函数的__doc__时,它是空的
  • sphinx不能处理f-string文档字符串

我知道如何在导入后处理文档字符串,但这对于被sphinx识别但不是对象__doc__的doc字符串无效。


2
这回答您的问题吗?如何以编程方式设置文档字符串? - mkrieger1
不,那基本上就是我现在所做的,因为将f-string作为文档字符串似乎不起作用,至少在sphinx中不起作用,并且它不被检查工具识别。但是它似乎可以被普通的Python“执行”。 - Wouter van Ooijen
1
请展示一下你尝试过的内容中出现了什么问题。 - mkrieger1
我回滚了。 - Wouter van Ooijen
2个回答

16

Python中的文档字符串必须是普通的字符串字面值。

这很容易测试 - 以下程序不显示文档字符串:

BAR = "Hello world!"

def foo():
        f"""This is {BAR}"""
        pass

assert foo.__doc__ is None
help(foo)

Python语法文档指出,文档字符串必须是“字符串文字”,并且f-string参考文档的末尾说明它们“不能用作文档字符串”。

因此,不幸的是您必须使用__doc__属性。

但是,您应该能够使用装饰器来读取__doc__属性,并将其替换为您想要的内容。


1
谢谢,这正是我担心的。不幸的是,对于我来说很重要的对象,后处理__doc__字符串并不起作用 ;( - Wouter van Ooijen
我想在将文件传递给sphinx之前,我需要对整个文件进行预处理。 - Wouter van Ooijen
你怎么让它在Sphinx上运行?实际上,它在Sphinx上无法工作。 - J Agustin Barrachina

2
我们遇到了相同的问题,可能最终我们会这样做:
BAR = "Hello world!"

class A():
    __doc__ = f"""This is {BAR}"""
    pass

help(A)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接