2010-12-07 16 views
6

Sé que la convención PEP-8 para nombres de clase es ClassName. Pero a menudo usamos clases pequeñas como pseudo-espacios de nombres, enumeraciones, etc. En otras palabras, no es una clase real a la que vas a crear instancias. Hemos optado por una convención de nomenclatura en minúsculas para esas "clases", porque en realidad son un nombre de espacio/nombre enum.Estilo de Python: nombres de clase en minúsculas para "espacios de nombres"?

¿Alguien más tiene estilos internos para esto u otras formas de lograr lo mismo?

Un ejemplo:

import urllib2 

class config: # pseudo-namespace for module-level config variables 
    api_url = 'http://example.com/api' 
    timeout = 1.5 
    debug = True 

class countries: # pseudo-enum 
    new_zealand = 1 
    united_states = 2 

def func(): 
    if config.debug: 
     print 'Calling func()' 
    return urllib2.urlopen(config.api_url) 
+0

Buena pregunta, acabo implementado un espacio de nombres de esta manera hace un par de días y no estaba seguro de qué hacer. Normalmente usaría un módulo separado, pero en este caso no quería. – FogleBird

Respuesta

5

Para todas las enumeraciones y constantes, yo prefiero usar versiones en mayúsculas.

class COUNTRIES: # pseudo-enum 
    NEW_ZEALAND = 1 
    UNITED_STATES = 2 

Todavía está bien conmigo, si el nombre de la clase no está todo en mayúscula. Dado que, de cualquier forma, está relacionado con los valores enum. Siempre voy a usarlo como Countries.NEW_ZEALAND, lo que me dice que es una enumeración.

class Countries: # pseudo-enum 
    NEW_ZEALAND = 1 
    UNITED_STATES = 2 
1

Por qué no

class PseudoNamespace: pass 

config = PseudoNamespace() 
config.api_url = 'http://example.com/api' 
config.timeout = 1.5 
config.debug = True 

countries = PseudoNamespace() 
config.new_zealand = 1 
config.united_states = 2 

si realmente se preocupa por el PEP?

2

utilizo diccionarios lugar:

config = dict(
    api_url = 'http://example.com/api', 
    timeout = 1.5, 
    debug = True) 

countries = dict(
    new_zealand = 1, 
    united_states = 2) 

Si se encuentra atributo de acceso engorroso en un pitón dict, intentar un attrdict:

class attrdict(dict): 
    def __init__(self, *args, **kwargs): 
     dict.__init__(self, *args, **kwargs) 
     self.__dict__ = self 

Permite acceder a las entradas del diccionario con claves que son identificadores válidos como atributos, por ejemplo config.api_url en lugar de config["api_url"].

Por supuesto que uso nombres minúsculos para estos.

4

También puede crear un módulo llamado config con el siguiente contenido:

api_url = 'http://example.com/api' 
timeout = 1.5 
debug = True 
Cuestiones relacionadas