2010-03-10 5 views

Répondre

31

Vous pouvez, mais vous ne devriez pas. Ce n'est pas une bonne habitude d'utiliser les noms de built-ins, car ils remplaceront le nom du built-in dans cette portée. Si vous devez utiliser ce mot, modifiez-le légèrement pour le contexte donné.

Même si cela n'aura probablement pas d'importance pour un petit projet qui n'utilise pas type, il est préférable de ne pas utiliser les noms de mots-clés/built-ins. Le Python Style Guide fournit une solution pour cela si vous devez absolument utiliser un nom qui est en conflit avec un mot-clé:

single_trailing_underscore_: utilisé par convention pour éviter les conflits avec mot-clé Python, par exemple

+13

BTW, comme le type est un mot générique, souvent surutilisé, l'ajout d'un qualificatif comme dans "car_type" ou "animal_type" fait pour un programme plus auto-documentant de toute façon – mjv

+0

je l'habitude d'utiliser 'tipe', mais j'ai toujours détesté le comme ça. maintenant j'utilise 'typ' – rbp

+2

Hahah, c'est une blague @rbp, non? ...droite? – Bloke

2

Vous pouvez, mais vous masquer le type de nom intégré. Donc il vaut mieux ne pas faire ça.

3

Vous pouvez utiliser n'importe quel mot clé qui suit les règles d'identificateur comme identificateur. type n'est pas un mot-clé, mais l'utiliser ombrera le type intégré.

8

Vous pouvez, et c'est bien. Même si le conseil de ne pas ombrer les builtins est important, il s'applique plus fortement si un identifiant est commun, car cela augmentera la confusion et la collision. Il ne semble pas type va causer de la confusion ici (mais vous en saurez plus à ce sujet que quiconque), et je pourrais utiliser exactement ce que vous avez.

+3

+1 pour mentionner la confusion potentielle. Je pense que c'est un problème beaucoup plus important que le problème technique d'éventuellement occulter un builtin: quelqu'un lisant le code (peut-être même la personne qui l'a écrit) peut s'attendre à ce que 'type' se réfère au builtin. Les chances d'occulter accidentellement le 'type' intégré semblent petites en comparaison: elles ne sont pas souvent utilisées en code réel. –

-1

Vous pouvez utiliser _type pour cette

# Example 
def foo(_type): 
    pass 

Si vous utilisez type, vous ne pouvez pas utiliser type() dans cette fonction

>>> #For Example 
>>> type('foo') 
<type 'str'> 
>>> type = 'bar' 
>>> type('foo') 
... 
Traceback (most recent call last): 
File "<input>", line 1, in <module> 
TypeError: 'str' object is not callable 
Questions connexes