11

我编写了一个小型 python 模块,在其中使用了几个命名元组来传递信息,因为我发现它们非常具有表现力。我考虑了这些类型,并按照 PEP8 的类名约定(CamelCased)命名它们。但是 pylint 看到了这条线:

PersonData = collections.namedtuple('PersonData', 'name surname age')

在模块的全局范围内,然后:无效的常量名称“PersonData”。

我在滥用命名元组吗?什么是pythonic推荐?我只能想到抑制警告,将结构重命名为 PERSON_DATA,或者使其成为一个完整的类。请注意,在我的情况下,虽然它有方法是没有意义的。

如果答案是抑制警告。这不是 pylint 与命名元组的反复出现的问题吗?

(使用 pylint-0.26.0、python-2.7.4)

4

4 回答 4

6

此问题已在较新版本的 pylint 中得到解决。

我的系统正在从 ubuntu (13.04) 存储库 (pylint-0.26.0) 中选择版本。使用virtualenv我可以 pip install pylint-1.0.0 识别命名元组并且实际上将强制使用与类相同的格式。

请注意,如果您正在对字段字符串进行字符串操作,它不会拾取它。例如:

PersonData = collections.namedtuple('PersonData', 'name ' + 'surname age')

仍然会导致 pylint-1.0.0 吐出无效常量名称的错误代码。在这种情况下,唯一的解决方法是按照Martijn Pieters的建议禁用警告。

于 2013-11-25T08:46:30.427 回答
5

您可以忽略pylint这里,您使用的骆驼命名约定完全正确。

您可以抑制警告:

PersonData = collections.namedtuple('PersonData', 'name surname age')  # pylint: disable-msg=C0103

namedtuple是一个类工厂,所以使用类的命名约定。

于 2013-11-14T08:46:48.623 回答
1

这已在pylint-1.0.0(参见Pylint 的变更日志)中得到修复:

对于顶级名称分配,如果 pylint 可以检测到右侧的值是类(如 collections.namedtuple()),则将使用类名正则表达式。

请注意,namedtuple 必须在顶层定义,如果在函数 pylint 中定义,仍然会发出invalid-name警告。

于 2017-01-20T11:45:12.027 回答
0

in such case pylint should detect the name is assigned to a class an use the class name regexp.

Please submit a ticket on http://bitbucket.org/logilab/pylint

于 2013-11-18T09:28:45.527 回答