namedpuples是否应遵循python中的常量名称约定?

Lui*_*uis 11 python pep8 pylint namedtuple

我写了一个小python模块,我使用几个命名元组来传递信息,因为我觉得它们很有表现力.我考虑了这些类型并按照PEP8类名称(CamelCased)命名它们.然而,pylint看到了这条线:

PersonData = collections.namedtuple('PersonData', 'name surname age')
Run Code Online (Sandbox Code Playgroud)

在模块的全局范围内,并且:无效的常量名称'PersonData'.

我是否误用了名字组?什么是pythonic推荐?我只能想到抑制警告,将结构重命名为PERSON_DATA,或使其成为完整的类.请注意,在我的情况下,它有没有意义,但它有方法.

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

(使用pylint-0.26.0,python-2.7.4)

Lui*_*uis 6

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

我的系统从ubuntu(13.04)存储库(pylint-0.26.0)中选择了版本.使用virtualenv我可以pip安装pylint-1.0.0来识别命名元组,并且实际上将使用与类相同的格式强制执行.

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

PersonData = collections.namedtuple('PersonData', 'name ' + 'surname age')
Run Code Online (Sandbox Code Playgroud)

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

  • "在较新版本的pylint中解决了"什么?我是最新的Pylint版本(1.4.0),我仍然收到此错误. (8认同)
  • 我也是通过pylint 1.4.0和默认配置得到这个错误 (3认同)
  • 我仍然在pylint 1.5.4中看到这个错误 (2认同)

Mar*_*ers 5

你可以忽略pylint这里,你正好使用驼峰案例命名约定.

您可以取消警告:

PersonData = collections.namedtuple('PersonData', 'name surname age')  # pylint: disable-msg=C0103
Run Code Online (Sandbox Code Playgroud)

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

  • 只是一件小事:我更喜欢这种格式的pylint内联注释:#pylint:disable = invalid-name更可读,更明显是什么whas覆盖. (3认同)