2012-07-07 19 views
7

Estaba leyendo el código fuente de collections.py ayer.Razones para cambiar el nombre de la propiedad a _property

En la función namedtuple, se genera una cadena template y luego exec ed en un espacio de nombre temporal.

En el espacio de nombres dict, property se renombra a _property y tuple a _tuple.

Me pregunto cuál es la razón detrás de esto. ¿Qué problemas ayuda a evitar este cambio de nombre?

Respuesta

9

En general, los nombres de subrayado a veces se utilizan en la biblioteca estándar para mantener limpio un espacio de nombres.

En el caso de _tuple, fue necesario debido a que está permitido el uso de "tupla" como un nombre de campo:

>>> Example = namedtuple('Example', ['list', 'tuple', 'property']) 
>>> e.list 
[10, 20, 30] 
>>> e.tuple 
(40, 50, 60) 
>>> e.property 
'Boardwalk' 
+2

@JBernardo, sabes que RH es uno de los desarrolladores principales de Python, ¿verdad? Quiero decir, sí, él podría estar equivocado sobre esto, pero sospecho que está hablando por experiencia. – senderle

+4

Es cierto, soy el autor del código para * namedtuple * :-) –

+0

Así que no estoy muy lejos de decir que quiero "con", "como" y "excepto" como nombres de campo, entonces? :) –

0

Evita conflictos de nombres de palabras clave.

decir que tuvimos una lista imaginaria de ['when', 'who', 'why', 'where', 'with']

decir. uno no puede escribir my_name_tuple.with sin que el intérprete se vaya.

Lea atentamente los documentos sobre el título nombrado y debería obtenerlo.

+0

En Python2.7 puede establecer 'rename = True' para que nombres inválidos como 'with' serán reemplazados por algo como' _4'. Yendo o no, esto no afectará a la declaración como 'x = propiedad (...)' que se ejecuta en el contexto de definición de clase. – satoru

Cuestiones relacionadas