Имя модуля переопределяет встроенный - PullRequest
4 голосов
/ 04 сентября 2010

Я делаю игру на Python, и имеет смысл иметь один из моих модулей с именем 'map'.Мой предпочтительный способ импорта заключается в следующем:

from mygame import map

Однако, как говорит мне Pylint, это переопределяет встроенное.Какой распространенный способ борьбы с этим?Вот варианты, которые я могу придумать:

1) Игнорировать предупреждение Pylint, так как я все равно не использую встроенную карту.

2) Измените на:

import mygame

затем ссылаться на mygame.map во всем моем коде.

3) Переименовать модуль моей карты в другое (hexmap, gamemap и т.2) но я хочу посмотреть, что думают другие люди.

Ответы [ 3 ]

3 голосов
/ 04 сентября 2010

Это субъективно;нет правильного ответа.

Тем не менее, для меня 3 - единственный разумный вариант.Действительно действительно не делай 1;переписывать встроенные функции почти никогда не бывает хорошей идеей, и в этом случае это особенно сбивает с толку.2 лучше, но я думаю, что все еще ожидается, что любая функция с именем map выполняет какую-то операцию, аналогичную встроенной.

Возможно mapping?

2 голосов
/ 04 сентября 2010

Квот PEP 20 :

Явное лучше, чем неявное.
Перед лицом двусмысленности откажитесь от искушения угадать.
Должен быть один - и желательно только один - очевидный способ сделать это.

mygame.map более явно, чем map. mygame.board или mygame.terrain менее неоднозначно, чем mygame.map. Догадываться, если код говорит о __builtins__.map или mygame.map, страшно и в большинстве случаев будет неправильно.

1 голос
/ 04 сентября 2010

Опции 2 или 3 будут работать, однако я думаю, что было бы наиболее понятно переименовать map, чтобы его нельзя было перепутать. Таким образом, вы можете получить краткость, которую дает вам ссылка на map вместо mygame.map, но у вас не будет проблем с областью действия. Кроме того, я думаю, что map - это несколько неописуемое имя переменной, поэтому было бы лучше дать ему более конкретное имя.

...