2010-09-03 22 views
4

Je fais un jeu en Python, et il est logique d'avoir un de mes modules nommé «carte». Ma façon préférée d'importation est de le faire:Nom du module redéfinit intégré

from mygame import map 

Comme pylint me dit, cependant, cela est en train de redéfinir intégré. Quelle est la manière commune de traiter avec ceci? Voici les choix que je peux faire:

1) Ignorer l'avertissement pylint puisque je n'utilise pas la carte intégrée de toute façon.

2) Modification:

import mygame 

la référence puis comme mygame.map tout au long de mon code.

3) Renommer mon module carte pour quelque chose d'autre (hexmap, gamemap, etc.)

Je penche vers (2), mais je veux voir ce que les autres pensent.

Répondre

3

Ceci est subjectif; il n'y a pas de bonne réponse.

Cela dit, pour moi 3 est la seule option raisonnable. Vraiment vraiment ne pas faire 1; l'écrasement de builtins n'est presque jamais une bonne idée et dans ce cas, c'est particulièrement déroutant. 2 est meilleur, mais je pense qu'il existe toujours une attente que toute fonction appelée map effectue une opération similaire à celle de l'intégré.

Peut-être que mapping?

+0

Je pense que le «mapping» serait vu par l'outsider comme quelque chose à voir avec une structure de données comme un dictionnaire plutôt qu'avec une carte de jeu. –

+0

C'est le nom d'un module, pas une fonction. Il contient des classes pour les cartes carrelées hexagonales, les tuiles hexagonales simples, les fonctions auxiliaires, etc. – Colin

+1

@Colin: désolé, édité. Pourquoi pas 'maps'? @Rafe: c'est vrai; Je pense que le contexte est suffisant dans ce cas. – katrielalex

1

Les options 2 ou 3 fonctionneraient, mais je pense qu'il serait plus compréhensible de renommer map afin qu'il ne puisse pas être confondu. De cette façon, vous pouvez obtenir la concision qui se réfère à map au lieu de mygame.map vous donne, mais vous n'aurez aucun problème avec la portée. De plus, je pense que map est un nom de variable peu descriptif, donc il vaudrait mieux lui donner un nom plus spécifique.

2

Quoth PEP 20:

explicite est mieux que implicite.
Face à l'ambiguïté, refusez la tentation de deviner.
Il devrait y avoir une - et de préférence une seule - façon évidente de le faire.

mygame.map est plus explicite que map. mygame.board ou mygame.terrain est moins ambigu que mygame.map. Deviner si le code parle de __builtins__.map ou mygame.map est effrayant et sera la plupart du temps faux.