应该避免通配符导入吗?

2024-04-08

我正在使用 PyQt 并且遇到了这个问题。如果我的导入语句是:

from PyQt4.QtCore import *
from PyQt4.QtGui import *

然后 pylint 会给出数百个“未使用的导入”警告。我犹豫是否要关闭它们,因为可能还有其他未使用的导入实际上是有用的。另一种选择是这样做:

from PyQt4.QtCore import Qt, QPointF, QRectF
from PyQt4.QtGui import QGraphicsItem, QGraphicsScene, ...

我最终在 QtGui 线上上了 9 门课。还有第三种选择,即:

from PyQt4 import QtCore, QtGui

然后每当我使用它们时,都在所有类前面加上 QtCore 或 QtGui 前缀。

在这一点上,我不知道我最终会在我的项目中做哪一个,尽管从我的角度来看,最后一个似乎是最痛苦的。这里有哪些常见做法?使用一种风格而不是另一种风格是否有技术原因?


你的问题标题的答案是“是”:我建议永远不要使用from ... import *,我在另一个最近的答案中讨论了原因。简而言之,限定名称是good,裸名非常有限,因此在您提供的选项中,“第三个选项”是最佳选择(因为您将使用限定名称,而不是裸名)。

(限定名称与裸名的优点包括易于出于测试目的伪造/模拟、降低意外重新绑定引起的未注意到错误的风险、出于记录目的而“半伪造”“跟踪类”中的顶级名称的能力确切地说,你正在使用什么,并简化诸如分析之类的活动——缺点,几乎没有……另请参阅Python禅宗中最后但并非最不重要的公案,import this在交互式解释器提示下)。

同样好,如果你不愿意多说 7 个字符QtCore.whatever, 是缩写——from PyQt4 import QtCore as Cr and from PyQt4 import QtGi as Gu(然后使用Cr.blah and Gu.zorp)或类似的。与所有缩写一样,这是简洁性和清晰性之间的风格权衡(您愿意命名一个变量吗?count_of_all_widgets_in_the_inventory, num_widgets, or x?通常中间的选择是最好的,但并不总是;-)。

顺便说一句,我不会使用多个as单个条款from or import语句(可能会令人困惑),我宁愿有多个语句(如果任何导入出现问题,也更容易调试,如果将来更改导入,则更容易编辑,...)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

应该避免通配符导入吗? 的相关文章

随机推荐