PEP8 与 PyQt,如何协调函数命名规范?
我最近开始在一些项目中使用PyQt,但遇到了一个风格上的困扰。PyQt的函数名是用驼峰命名法(camel case),而我更喜欢遵循PEP8的规范,PEP8建议函数名使用下划线和小写字母。
所以,一方面,我可以继续遵循PEP8,这样我的代码中就会有混合的函数调用,既有驼峰命名的函数,也有下划线命名的函数,甚至我的类名也会有混合的命名,因为我需要重载像mousePressEvent这样的函数。另一方面,我也可以不遵循PEP8,统一使用驼峰命名法来保持一致性。
我知道这个问题是主观的,实际上只是我个人的偏好,但我很想听听其他人是怎么做的,以及他们为什么选择那样做。
6 个回答
pep8文档里说了在这种情况下应该怎么做(我特别强调一下):
新的模块和包(包括第三方框架)应该按照这些标准来写,但如果已有的库风格不同,内部的一致性更重要。
如果我是你,我不会去和你的框架对着干,就像我一般不会和市政厅对着干一样;-)。我也喜欢用小写加下划线的函数命名方式,这也是PEP 8的规定,但当我在一个强制使用不同命名风格的框架中编程时,我就会接受那个风格,因为我没办法说服框架去用我认为“更好”的风格。而且,风格不一致(就是混合使用不同风格)其实更糟糕。
当然,如果你使用不止一个框架,一些风格混合是不可避免的……比如,PyQt用的是驼峰命名法,而标准的Python库函数则是小写加下划线!-)。不过,像Qt这样的框架通常是为了通过子类扩展而设计的,而标准Python库在这方面的设计就少一些。因此,在大多数情况下,如果命名风格被强制(因为你需要重写一个方法,所以不能选择其他命名方式),它通常会被强制为驼峰命名(由Qt),而很少会变成小写(由标准Python库)。所以,我认为在这种情况下采用Qt的风格还是相对较好的选择。
在2020年12月,随着Qt 6.0的发布,官方推出了Qt for Python 6 / PySide6,这是一种将Qt与Python结合的工具。在这个新版本中,增加了一个叫做__feature__
的新选项。通过这个选项,你可以使用符合PEP8规范的蛇形命名法的方法和真正的属性来创建Qt对象。
旧的写法:
table = QTableWidget()
table.setColumnCount(2)
button = QPushButton("Add")
button.setEnabled(False)
layout = QVBoxLayout()
layout.addWidget(table)
layout.addWidget(button)
新的PySide6写法:
from __feature__ import snake_case, true_property
table = QTableWidget()
table.column_count = 2
button = QPushButton("Add")
button.enabled = False
layout = QVBoxLayout()
layout.add_widget(table)
layout.add_widget(button)