模块名称重新定义了内置功能
我正在用Python制作一个游戏,我觉得把我的一个模块命名为'map'是合适的。我的导入方式通常是这样的:
from mygame import map
不过,pylint(一个检查代码的工具)告诉我,这样做会重新定义一个内置的东西。那大家通常是怎么处理这种情况的呢?我想到了几个选择:
1) 忽略pylint的警告,因为我反正不使用这个内置的map。
2) 改成:
import mygame
然后在我的代码中都用mygame.map来引用。
3) 把我的map模块改个名字,比如叫hexmap、gamemap等等。
我倾向于选择第二个方案,但我想听听其他人的看法。
3 个回答
1
选项2或3都可以用,不过我觉得最简单明了的办法是把map
这个名字改一下,这样就不会搞混了。这样一来,你可以享受到直接用map
而不是mygame.map
的简洁,同时也不会遇到作用域的问题。而且,我觉得map这个名字有点不太具体,换个更明确的名字会更好。
2
引用自 PEP 20:
明确的比隐含的要好。
面对模糊的情况,拒绝猜测的诱惑。
应该有一种——最好只有一种——明显的方法来做这件事。
mygame.map
比 map
更明确。mygame.board
或 mygame.terrain
比 mygame.map
更不容易引起误解。猜测代码是在说 __builtins__.map
还是 mygame.map
是很可怕的,而且大多数情况下都是错的。
4
这个问题没有绝对的答案,大家的看法可能不同。
不过对我来说,选3是最合理的选择。真的,真的不要选1;覆盖内置函数几乎从来不是个好主意,而且在这种情况下会特别让人困惑。选2会好一些,但我觉得大家还是会期待任何叫做map
的函数能做一些和内置函数类似的操作。
那要不要用mapping
呢?