为什么字节字符串 b'string'
不能用作类或函数的文档字符串(从某种程度上说我猜是模块)?
恰当的例子:
>>> class Foo:
... b"""My Foo class for Fooing"""
>>> Foo.__doc__ is None
True
与函数类似。
对于 r''
、u''
(预期)字符串,它工作正常。我在文档中也找不到任何内容。知道这是为什么吗?
最佳答案
正如 @IgnacioVazquez-Abrams 所指出的,b'string'
不是文本,或者更具体地说,它不是字符串,它是一个 bytes object ,而且我认为您不会在 Python 文档的任何地方看到这些被称为“字节字符串”的东西(尽管我可能是错的);事实上,这对我个人来说听起来很矛盾。
另一方面,r''
和 u''
以及 ''
是字符串(原始字符串文字、Unicode 字符串文字, 和字符串文字)。第一句为the spec for docstrings状态:
A docstring is a string literal that occurs as the first statement in a module, function, class, or method definition. Such a docstring becomes the
__doc__
special attribute of that object.
它还规定:
Use
r"""raw triple double quotes"""
if you use any backslashes in your docstrings. For Unicode docstrings, useu"""Unicode triple-quoted strings"""
.
这可能不是一个令人满意的答案,因为它没有解释为什么 __doc__
在一种情况下会返回一个字符串而在另一种情况下返回 None
的内部结构,或者文档字符串是如何形成/解析的。但是,我认为正在发生的事情是你得到了 None
因为你还没有定义一个文档字符串,而只是一个你没有分配给你的类中的任何变量的字节对象。如果你这样做,同样的事情会发生:
class Foo:
1
1
没有被解析为类的文档字符串(或 __doc__
属性),因为它不是字符串,我认为字节也会发生同样的情况在你的例子中是文字。无论如何,我认为文档清楚地表明只有“字符串”可以用作文档字符串,因此字节对象与 int
或 bool< 一样糟糕的文档字符串似乎是合乎逻辑的
,或任何其他非字符串数据类型。不过,我能理解你的好奇心,尤其是因为 byte literals和字符串文字在视觉上非常相似。
tl;博士:
字节对象不是字符串,Python 文档字符串只能使用字符串。
关于python - 为什么不能将字节字符串用作 Docstrings?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40705482/