爲什麼字節串b'string'
不能用作類或函數的文檔字符串(以及我在猜測模塊的程度)?爲什麼不能將字符串用作Docstrings?
案例:
>>> class Foo:
... b"""My Foo class for Fooing"""
>>> Foo.__doc__ is None
True
與功能
同樣。
對於r''
,u''
(預期)字符串,它的工作原理沒問題。我在文檔中也找不到任何東西。任何想法爲什麼這是?
爲什麼字節串b'string'
不能用作類或函數的文檔字符串(以及我在猜測模塊的程度)?爲什麼不能將字符串用作Docstrings?
案例:
>>> class Foo:
... b"""My Foo class for Fooing"""
>>> Foo.__doc__ is None
True
與功能
同樣。
對於r''
,u''
(預期)字符串,它的工作原理沒問題。我在文檔中也找不到任何東西。任何想法爲什麼這是?
正如指出的@ IgnacioVazquez - 艾布拉姆斯,b'string'
不是文本,或者更具體地說,它是不是一個字符串,它是一個bytes object,我不認爲你會看到這些被稱爲「字節串「Python文檔中的任何地方(雖然我可能是錯的);實際上這聽起來像是我個人的矛盾。
另一方面,r''
和u''
和''
是字符串(原始字符串文字,Unicode字符串文字和字符串文字分別)。爲the spec for docstrings第一句規定:
文檔字符串字符串文字發生如在模塊,函數,類,或方法定義的第一個語句。這種文檔字符串成爲該對象的特殊屬性。
它還規定:
使用
r"""raw triple double quotes"""
如果在您的文檔字符串使用任何反斜線。對於Unicode文檔,請使用u"""Unicode triple-quoted strings"""
。
這可能不是一個令人滿意的答案,因爲它並不能解釋爲什麼__doc__
在一種情況下會返回一個字符串,並在其他回報None
,或如何形成的文檔字符串/解析的內部。不過,我認爲發生的事情是你得到None
,因爲你只是沒有定義一個文檔字符串,但只有一個字節對象,你沒有分配給你的類中的任何變量。同樣的事情會發生,如果你這樣做:
class Foo:
1
1
沒有被解析爲類的文檔字符串(或__doc__
屬性),因爲它不是一個字符串,我想用文字的字節數相同的情況在你的例子中。無論如何,我認爲文檔清楚地表明,只有「字符串」可以用作文檔字符串,所以字節對象可能會像int
或bool
或其他任何其他非字符串數據類型一樣可能造成文檔差異。不過,我可以理解你的好奇心,尤其是因爲byte literals和字符串文字在視覺上很相似。
字節對象不是字符串,而只有字符串可用於Python的文檔字符串。
可能因爲它們實際上不是文字。 –