2016-11-20 46 views
2

爲什麼字節串b'string'不能用作類或函數的文檔字符串(以及我在猜測模塊的程度)?爲什麼不能將字符串用作Docstrings?

案例:

>>> class Foo: 
...  b"""My Foo class for Fooing""" 
>>> Foo.__doc__ is None 
True 
與功能

同樣。

對於r'',u''(預期)字符串,它的工作原理沒問題。我在文檔中也找不到任何東西。任何想法爲什麼這是?

+6

可能因爲它們實際上不是文字。 –

回答

1

正如指出的@ 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__屬性),因爲它不是一個字符串,我想用文字的字節數相同的情況在你的例子中。無論如何,我認爲文檔清楚地表明,只有「字符串」可以用作文檔字符串,所以字節對象可能會像intbool或其他任何其他非字符串數據類型一樣可能造成文檔差異。不過,我可以理解你的好奇心,尤其是因爲byte literals和字符串文字在視覺上很相似。

TL; DR:

字節對象不是字符串,而只有字符串可用於Python的文檔字符串。

相關問題