gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 05:19:53 25 4
gpt4 key购买 nike

为什么字节字符串 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com