Al utilizar claves de diccionario (dict) en Python, parece que hay algunos enfoques generales:¿Cuáles son las mejores prácticas de Python para las constantes de clave dict del diccionario?
some_dict['key_name'] # string constants everywhere
some_dict[KeyConstants.key_name] # where class KeyConstants: key_name: 'key_name'
some_dict[KEY_NAME] # with from some_module import KEY_NAME # a module level constant
'nombre_tecla 'tiene la desventaja de que estás repitiendo consta en todo tu código. No es SECO. Peor aún, si alguna vez vas a publicar tu API (en el sentido más amplio), los consumidores de tu API repetirán estas constantes en todas partes, y si alguna vez quieres cambiar 'key_name' por 'better_key_name', será un cambio radical .
Este es el lenguaje tipeado, enfoque DRY, con constantes consolidadas en un solo lugar. Sus únicas desventajas son que es feo, un poco menos legible y más detallado. Los principios Pythonic principalmente prohíben eso. Le permite cambiar fácilmente la constante que representa la clave, ya que todos codifican contra la variable KeyConstants.key_name. También funciona bien con IDEs para refactorización.
Las constantes de nivel del módulo se recomiendan en la guía de estilo PEP 8. ALL_CAPS_ARE_LOUD y más difícil de escribir. Esto tiene algunas de las ventajas de ambas opciones 1 y 2.
¿Cuáles son algunas otras mejores prácticas para las constantes clave dict? ¿Cuál de los enfoques anteriores se prefiere y cuándo?
¿Por qué tener tantas llaves constantes en primer lugar? ¿Por qué no usar variables de nivel de módulo o atributos de retención de objeto tipo registro? – delnan
Los dictados son buenos si las claves son variables, de lo contrario puede ir con tuplas o atributos con nombre en una clase. Usar claves constantes debería ser una ocasión muy rara. –
El problema de dict con claves es extremadamente común cuando se usa JSON o cuando se trata de una base de datos/tienda nosql sin un ORM (por ejemplo, pymongo sin MongoEngine). Si bien puedes ajustar las claves dict en clases con atributos, terminarás con un feo código de plomería para empaquetar/desempacar si los datos subyacentes eran dict para empezar. – velshin