为什么字节字符串b'string'
不能用作类或函数的文档字符串(以及我猜测模块的范围)?
案例:
>>> class Foo:
... b"""My Foo class for Fooing"""
>>> Foo.__doc__ is None
True
与功能类似。
对于r''
,u''
(预期)字符串,它可以正常工作。我在文档中找不到任何内容。知道为什么会这样吗?
答案 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__
属性),因为它不是字符串,我认为在您的示例中字节文字也会发生同样的情况。无论如何,我认为文档清楚地表明只有“字符串”可以用作文档字符串,所以字节对象与int
或bool
或任何字符串对象一样差,这似乎是合乎逻辑的。其他非字符串数据类型。然而,我可以理解你的好奇心,特别是因为byte literals和字符串文字在视觉上是相似的。
字节对象不是字符串,只有字符串可用于Python文档字符串。