2010-03-10 9 views

Respuesta

31

Puede, pero no debe. No es una buena costumbre usar nombres de complementos porque anularán el nombre del built-in en ese ámbito. Si debe usar esa palabra, modifíquela ligeramente para el contexto dado.

Si bien probablemente no importe para un proyecto pequeño que no utiliza type, es mejor no tener el hábito de usar los nombres de palabras clave/integradas. El Python Style Guide proporciona una solución para esto si es absolutamente necesario utilizar un nombre que está en conflicto con una palabra clave:

single_trailing_underscore_: utilizado por convención para evitar conflictos con palabra clave Python, por ejemplo,

+13

Por cierto, ya que el tipo es una palabra tan genérica, a menudo usada, agregar un calificador como en "car_type" o "animal_type" lo convierte en un programa de auto-documentación de todos modos – mjv

+0

solía usar 'tipe', pero siempre odié el como se veía ahora uso 'typ' – rbp

+2

Hahah, eso es una broma @rbp, ¿verdad? ...¿derecho? – Bloke

2

Puede, pero estaría enmascarando el tipo de nombre incorporado. Entonces es mejor no hacer eso.

3

Puede usar cualquier palabra clave que no siga las reglas del identificador como un identificador. type no es una palabra clave, pero su uso sombreará el type incorporado.

8

Puedes, y está bien. A pesar de que el consejo de no sombrear los edificios internos es importante, se aplica con más fuerza si un identificador es común, ya que aumentará la confusión y la colisión. No parece tipo causará confusión aquí (pero lo sabrá más que nadie), y podría usar exactamente lo que tiene.

+3

+1 por mencionar posibles confusiones. Creo que es un problema mucho más grande que el problema técnico de posiblemente sombrear un built-in: alguien que lea el código (incluso posiblemente la persona que lo escribió) podría esperar 'type' para referirse al built-in. Las posibilidades de sombrear accidentalmente el 'tipo' integrado parecen pequeñas en comparación: no se usa con frecuencia en el código real. –

-1

Puede utilizar _type para que

# Example 
def foo(_type): 
    pass 

Si utiliza type, no se puede utilizar type() en esa función

>>> #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 
Cuestiones relacionadas