这些是等价的吗?
class Empty : pass
和
class Empty:
'''
This class intentionally left blank
'''
第二个似乎更好的可读性,可以将pass
放在最后,但似乎没有必要。
评论是否被视为pass
?
答案 0 :(得分:7)
您的两个代码几乎等效,但不完全相同。 pass
只是一个无操作。 docstring几乎也是一个no-op,但它为你的类对象添加了一个__doc__
属性,所以差别很小。
在功能上等同于使用pass
的版本将使用Ellipsis
a.k.a. ...
:
class Empty: ...
在这种情况下,...
没有什么特别之处。您未分配的任何预先存在的对象也可以正常工作。例如,您可以将...
替换为None
,1
,True
等。...
的选择是一种受欢迎的选择,因为它在美学上更为美观赏心悦目。按照惯例,它表示要填写的存根,而pass
通常表示故意的无操作。
像这样使用...
将在Python 2中引发SyntaxError
。您可以使用命名的Ellipsis
对象,但这并不是那么漂亮。
您可能还会在有趣的函数中找到有关pass
和return None
等效性的this question。
答案 1 :(得分:2)
不,他们不等同。
自PEP 257的实现以来,如果模块,函数或类中的第一个表达式是一个字符串,那么该字符串将被赋值给该模块/ function / class的__doc__
属性:
docstring是一个字符串文字,作为第一个语句出现 模块,函数,类或方法定义。这样的文档 成为该对象的
__doc__
特殊属性。
功能,这些类是等效的。但是,当您为代码创建文档时,具有docstring和没有docstring的区别可能会有所不同。像sphinx-autodoc这样的工具可以选择文档字符串并为您的类生成文档,您最终会在文档中找到类似的内容:
class 清空()
本课程故意留空
出于这个原因,通常最好不要为这种事情使用docstring。相反,最好使用评论:
class Empty:
pass # This class intentionally left blank