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

标签 python string python-3.x byte

为什么字节字符串 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, use u"""Unicode triple-quoted strings""".

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

class Foo:
    1

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

tl;博士:

字节对象不是字符串,Python 文档字符串只能使用字符串。

关于python - 为什么不能将字节字符串用作 Docstrings?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40705482/

相关文章:

python - 将字符串查找列表转换为 python 中的列表

python-3.x - 尝试在 Keras 中创建 BLSTM 网络时出现类型错误

python - OpenCV 裁剪图像并显示裁剪后的原始图像

python - 如果任何列值不在 pandas 的列表中,则删除组

python - 使用 blender 和 twisted (python) 的服务器端渲染

python - 精度和召回率在模型中相同

r - 在数据框中选择某些字符串

python - celery 工厂功能与进口 celery

python - 为什么在 Django 启动时调用表单字段 __init__ 方法?

java - 在 Java 中复制到剪贴板