在python中,NamedTuple是否应该遵循常量名称约定?

在python中,NamedTuple是否应该遵循常量名称约定?,python,pylint,pep8,namedtuple,Python,Pylint,Pep8,Namedtuple,我已经编写了一个小型python模块,在其中我使用了两个namedtuple来传递信息,因为我发现它们非常有表现力。我考虑了这些类型,并按照类名称的PEP8约定(CamelCased)命名它们。然而,派林看到了这条线: PersonData = collections.namedtuple('PersonData', 'name surname age') 在模块的全局作用域中,并转到:无效的常量名称“PersonData” 我是不是误用了名字?蟒蛇的建议是什么?我只能考虑取消警告、将结构重命

我已经编写了一个小型python模块,在其中我使用了两个namedtuple来传递信息,因为我发现它们非常有表现力。我考虑了这些类型,并按照类名称的PEP8约定(CamelCased)命名它们。然而,派林看到了这条线:

PersonData = collections.namedtuple('PersonData', 'name surname age')
在模块的全局作用域中,并转到:无效的常量名称“PersonData”

我是不是误用了名字?蟒蛇的建议是什么?我只能考虑取消警告、将结构重命名为PERSON_数据或使其成为完整类。注意,在我的例子中,虽然有方法,但它没有意义

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


(使用pylint-0.26.0,python-2.7.4)

您可以忽略
pylint
在这里,您使用的驼峰大小写命名约定完全正确

您可以取消显示警告:

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

namedtuple
是一个类工厂,因此请使用类的命名约定。

在这种情况下,pylint应检测到名称已分配给类,并使用类名regexp


请在

上提交票据。此问题已在较新版本的pylint中解决

我的系统从ubuntu(13.04)存储库(pylint-0.26.0)中挑选版本。 使用
virtualenv
我可以pip安装pylint-1.0.0,它可以识别命名元组,并实际使用与类相同的格式执行

请注意,如果您在字符串字段上执行字符串操作,它将不会拾取它。例如:

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

仍将导致pylint-1.0.0吐出无效常量名称的错误代码。在这种情况下,唯一的解决办法是根据建议禁用警告。

这已在
pylint-1.0.0
中修复(请参阅):

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


请注意,必须在顶层定义namedtuple,如果在函数pylint中定义,pylint仍将发出
无效名称
警告。

“在pylint的较新版本中解决”什么?我使用的是最新的Pylint版本(1.4.0),我仍然会遇到这个错误。我刚刚用0.26.0、1.0.0和1.4.0在不同的virtualenvs中进行了尝试,它仍然为我显示了相同的结果:最旧的版本需要CAPITAL_案例,而两个较新的CamelCase。我建议您再试一次(注意homedir中的custom.pylintrc)我也在pylint 1.4.0和默认配置中遇到了这个错误。我仍然在pylint 3 1.6.5中看到它。只是一件小事:我更喜欢这种格式的pylint内联注释:#pylint:disable=无效名称更易读,更清楚覆盖的内容。