PEP-526与类变量的docstrings不兼容?

时间:2018-04-09 16:47:24

标签: python python-3.x pylint type-hinting docstring

如果我将PEP-526用于类级变量,我必须在类的文档字符串中记录它们,在这种情况下我需要选择我最喜欢的方法来执行此操作。

Python 3.6.4 pylint == 1.8.4

class Joe(object):
  counter: int = 0
  """This is a counter"""

pylint说(正确地说,无论变量是否被赋值):

  

W:3:2:String语句无效(无意义字符串语句)

2 个答案:

答案 0 :(得分:1)

不是PEP 526与文档字符串不兼容;它的Pylint不了解你做了什么。等待更新。

有些工具支持类变量的文档字符串概念,但它从未成为Python本身的一部分,而PEP 526并没有改变。

答案 1 :(得分:0)

在这种情况下,pylint将注释理解为字符串表达式,而不是类doc注释。这意味着它将字符串表示为未存储在任何变量中的表达式,并且在表达式执行后将丢失。这是同样的例子:

def foo():
    a = 1
    """ this is string expression, not doc string """
    b = 2

在您的情况下,更正确的是将docstring放在顶级正文中:

class Joe(object):
    """This is a counter"""
    counter: int = 0

和pylint正确理解:

************* Module tt
C:  4, 0: Trailing newlines (trailing-newlines)
C:  1, 0: Missing module docstring (missing-docstring)
R:  1, 0: Too few public methods (0/2) (too-few-public-methods)