注释为空的类与Python中的传递相同?

时间:2018-04-10 12:47:15

标签: python

这些是等价的吗?

class Empty : pass

class Empty:
    '''
    This class intentionally left blank
    '''

第二个似乎更好的可读性,可以将pass放在最后,但似乎没有必要。

评论是否被视为pass

2 个答案:

答案 0 :(得分:7)

您的两个代码几乎等效,但不完全相同。 pass只是一个无操作。 docstring几乎也是一个no-op,但它为你的类对象添加了一个__doc__属性,所以差别很小。

在功能上等同于使用pass的版本将使用Ellipsis a.k.a. ...

class Empty: ...

在这种情况下,...没有什么特别之处。您未分配的任何预先存在的对象也可以正常工作。例如,您可以将...替换为None1True等。...的选择是一种受欢迎的选择,因为它在美学上更为美观赏心悦目。按照惯例,它表示要填写的存根,而pass通常表示故意的无操作。

像这样使用...将在Python 2中引发SyntaxError。您可以使用命名的Ellipsis对象,但这并不是那么漂亮。

您可能还会在有趣的函数中找到有关passreturn 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