为什么不能将字节字符串用作Docstrings?

时间:2016-11-20 14:55:06

标签: python string python-3.x byte

为什么字节字符串b'string'不能用作类或函数的文档字符串(以及我猜测模块的范围)?

案例:

>>> class Foo:
...     b"""My Foo class for Fooing"""
>>> Foo.__doc__ is None
True

与功能类似。

对于r''u''(预期)字符串,它可以正常工作。我在文档中找不到任何内容。知道为什么会这样吗?

1 个答案:

答案 0 :(得分:1)

正如 @ IgnacioVazquez-Abrams 指出的那样,b'string'不是文字,或者更具体地说它不是字符串,它是bytes object,我不知道你认为你会在Python文档中的任何地方看到这些被称为“字节串”(虽然我可能是错的);事实上这听起来像个人的矛盾。

另一方面,r''u''以及''是字符串(原始字符串文字,Unicode字符串文字和字符串文字)。 the spec for docstrings州的第一句话:

  

docstring是一个字符串文字,作为模块,函数,类或方法定义中的第一个语句出现。这样的文档字符串成为该对象的__doc__特殊属性。

它还指定:

  

如果您在文档字符串中使用任何反斜杠,请使用r"""raw triple double quotes"""。对于Unicode文档字符串,请使用u"""Unicode triple-quoted strings"""

这可能不是一个令人满意的答案,因为它没有解释为什么__doc__在一种情况下会返回一个字符串而在另一种情况下返回None,或者如何形成/解析文档字符串的内部结构。但是,我认为发生的事情是你得到None,因为你还没有定义文档字符串,只有一个你没有分配给类中任何变量的字节对象。如果你这样做会发生同样的事情:

class Foo:
    1

1未被解析为类的docstring(或__doc__属性),因为它不是字符串,我认为在您的示例中字节文字也会发生同样的情况。无论如何,我认为文档清楚地表明只有“字符串”可以用作文档字符串,所以字节对象与intbool或任何字符串对象一样差,这似乎是合乎逻辑的。其他非字符串数据类型。然而,我可以理解你的好奇心,特别是因为byte literals和字符串文字在视觉上是相似的。

TL; DR:

字节对象不是字符串,只有字符串可用于Python文档字符串。