【问题标题】:Module name redefines built-in模块名称重新定义内置
【发布时间】:2025-12-17 18:50:02
【问题描述】:

我正在用 Python 制作游戏,我的模块之一命名为“map”是有意义的。我首选的导入方式是这样做:

from mygame import map

然而,正如 pylint 告诉我的那样,这是重新定义内置的。处理这种情况的常用方法是什么?以下是我能想到的选择:

1) 忽略 pylint 警告,因为我不使用内置地图。

2) 改为:

import mygame

然后在我的代码中引用为 mygame.map。

3) 将我的地图模块重命名为其他名称(十六进制地图、游戏地图等)

我倾向于(2),但我想看看其他人的想法。

【问题讨论】:

    标签: python coding-style naming-conventions conventions


    【解决方案1】:

    这是主观的;没有正确的答案。

    也就是说,对我来说 3 是唯一明智的选择。真的真的不要做 1;覆盖内置函数几乎从来都不是一个好主意,在这种情况下尤其令人困惑。 2 更好,但我认为仍然期望任何名为 map 的函数执行一些类似于内置函数的操作。

    也许mapping

    【讨论】:

    • 我认为mapping 会被局外人视为与字典之类的数据结构有关,而不是游戏地图
    • 这是模块的名称,而不是函数的名称。它包含用于十六进制平铺地图、单个十六进制平铺、辅助函数等的类。
    • @Colin:抱歉,已编辑。为什么不maps? @Rafe:这是真的;我认为在这种情况下上下文就足够了。
    【解决方案2】:

    QPEP 20:

    显式优于隐式。
    面对模棱两可,拒绝猜测的诱惑。
    应该有一种——最好只有一种——明显的方法来做到这一点。

    mygame.mapmap 更明确。 mygame.boardmygame.terrainmygame.map 更明确。猜测代码是在谈论 __builtins__.map 还是 mygame.map 是很可怕的,而且大多是错误的。

    【讨论】:

      【解决方案3】:

      选项 2 或 3 会起作用,但我认为重命名 map 是最容易理解的,以免混淆。这样,您可以获得引用 map 而不是 mygame.map 给您的简洁性,但您不会对范围有任何问题。另外,我认为 map 是一个有点难以描述的变量名称,所以最好给它一个更具体的名称。

      【讨论】: