我写了一个小的python模块,我使用几个命名元组来传递信息,因为我发现它们很有表现力。我考虑了这些类型并按照PEP8类名称(CamelCased)命名它们。然而,pylint看到了这一行:
PersonData = collections.namedtuple('PersonData', 'name surname age')
在模块的全局范围内,并且:无效的常量名称'PersonData'。
我是否误用了名字组?什么是pythonic推荐?我只能想到抑制警告,将结构重命名为PERSON_DATA,或使其成为完整的类。请注意,在我的情况下,它虽然有方法是没有意义的。
如果答案是抑制警告。这不是pylint与命名元组的反复出现的问题吗?
(使用pylint-0.26.0,python-2.7.4)
答案 0 :(得分: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建议禁用警告。
答案 1 :(得分:5)
你可以在这里忽略pylint
,你正好使用驼峰案例命名约定。
您可以取消警告:
PersonData = collections.namedtuple('PersonData', 'name surname age') # pylint: disable-msg=C0103
namedtuple
是一个类工厂,因此请使用类的命名约定。
答案 2 :(得分:1)
pylint-1.0.0
已修复此问题(请参阅Pylint's Changelog):
对于顶级名称赋值,如果pylint可以检测到右侧的值是一个类(如collections.namedtuple()),则将使用类名正则表达式。
请注意,必须在 toplevel 上定义namedtuple,如果已定义,例如在函数中,pylint仍然会发出invalid-name
警告。
答案 3 :(得分:0)
在这种情况下,pylint应该检测名称被分配给一个类使用类名regexp。
上提交门票