2011-06-14 9 views
20

Así es como estoy declarando constantes y utilizarlos a través de diferentes clases de Python:¿Cuál es la mejor manera de inicializar y usar contants en las clases de Python?

# project/constants.py 
GOOD = 1 
BAD = 2 
AWFUL = 3 

# project/question.py 
from constants import AWFUL, BAD, GOOD 

class Question: 
    def __init__(self): 
     ... 

¿Es lo anterior una buena manera de almacenar y utilizar los valores contant? Me doy cuenta de que después de un tiempo, el archivo de constantes puede ser bastante grande y podría importar explícitamente más de 10 de esas constantes en cualquier archivo dado.

+0

Bueno, primero hay no es una variable constante en python, y en segundo lugar su variable global ¿se usan en más de un módulo o solo en uno? – mouad

+0

Se usan en diferentes clases dentro de ese proyecto. –

Respuesta

28

por qué no usar

import constants 

def use_my_constants(): 
    print constants.GOOD, constants.BAD, constants.AWFUL 

Desde el Zen de Python:

Los espacios de nombres son buenas. Vamos a hacer más de esos!

EDIT: Excepto, cuando se hace la cita, se debe incluir una referencia y comprobar que funciona, porque, como otros han señalado, debe decir:

Los espacios de nombres son uno tocando la bocina gran idea - - ¡hagamos más de ésas!

Esta vez, de hecho me lo copió de la fuente: PEP 20 -- The Zen of Python

+5

En realidad, los "espacios de nombres son una gran idea para bocina" ... –

+1

... que es también una forma infinitamente más lógica de decirlo. – delnan

+0

@Daniel Roseman: Ouch. Estoy corregido. ¡Editaré mi publicación en consecuencia! –

2

Usted tiene algunas opciones:

  1. hacerlo de la manera que está haciendo en este momento con un archivo de constantes
  2. use una lima plana y analizarlo vez, pase un diccionario/clase en torno
  3. consulta fuera a una base de datos

Desde el punto de vista aéreo, 1 y 2 son más o menos lo mismo. En cuanto a su pregunta sobre la importación de constantes específicas, es mucho más fácil de usar una de las siguientes convenciones:

  • import constants; some_func(constants.AWFUL)
  • from constants import *; some_func(AWFUL)
7

Usted también tiene la opción, si las constantes están atados a una clase particular y usada privadamente dentro de esa clase para hacerlos específicos a esa clase:

class Foo(object): 
    GOOD = 0 
    BAD = 1 
    WTF = -1 

    def __init__(self... 

y listo.

Cuestiones relacionadas