模块名称重新定义内置
问题描述:
我在Python中制作游戏,并且有一个名为'map'的模块是有意义的。我的首选进口方式是这样做的:模块名称重新定义内置
from mygame import map
但是,由于pylint告诉我,这是重新定义一个内置的。处理这个问题的常用方法是什么?以下是我可以选择的选项:
1)忽略pylint警告,因为我不使用内置映射。
2)变更为:
import mygame
然后引用作为mygame.map在我的代码。
3)重命名我的地图模块到别的东西(hexmap,gamemap等)
我倾向于(2),但我想看看别人怎么想。
答
这是主观的;没有正确的答案。
这就是说,对我来说3是唯一明智的选择。真的真的不要做1;覆盖builtins几乎不是一个好主意,在这种情况下,它是特别混乱。 2更好,但我认为仍有一个期望,即所谓的map
函数执行一些与内建函数类似的操作。
也许mapping
?
答
选项2或3将工作,但我认为这是最容易理解的重命名map
,以便它不会混淆。这样,你可以得到简洁的指map
而不是mygame.map
给你,但你不会有任何问题的范围。另外,我认为map是一个不太具有说服力的变量名,所以最好给它一个更具体的名称。
答
答曰PEP 20:
明确优于隐式。
面对歧义,拒绝猜测的诱惑。
应该有一个 - 最好只有一个 - 明显的方法来做到这一点。
mygame.map
比map
更明确。 mygame.board
或mygame.terrain
比mygame.map
含糊不清。猜测代码是否在谈论__builtins__.map
或mygame.map
是可怕的,并且大多会是错误的。
我认为映射会被局外人看作是一种数据结构,如字典而不是游戏映射 – 2010-09-03 21:02:55
这是模块的名称,而不是函数。它包含十六进制瓷砖地图,单个六角形瓷砖,辅助功能等的类。 – Colin 2010-09-03 21:03:18
@Colin:对不起,已编辑。为什么不'地图'? @Rafe:那是真的;在这种情况下,我认为上下文就足够了。 – katrielalex 2010-09-03 21:04:00