Cómo almacenar una colección de constantes que pueden ser llamadas por Recopilación.variable?
Estoy buscando una colección que se pueda utilizar para almacenar múltiples constantes y también se pueda utilizar para obtener una lista de las mismas.
EDIT: No es necesario que sean constantes, pueden ser variables.
Quiero obtener un valor de esta manera:
Constants.primer_valor
Pero también obtener una lista de valores como:
Constants.valores
Que devuelva algo como:
['Primer valor', 'Segundo valor' ....]
Usar una clase y atributos de clase es bueno para el primer caso, pero no para el segundo:
class Constants:
primer_valor = 'Primer valor'
segundo_valor = 'Segundo valor'
Para obtener una lista de atributos tendría que hacer un método que haga eso.
También estoy considerando una tupla con nombre, pero nuevamente no sé cómo obtener la lista de valores:
class Constants(typing.NamedTuple):
primer_valor = 'Primer valor'
segundo_valor = 'Segundo valor'
EDIT:
Enum parece que tampoco tiene esa opción y además necesito obtener los valores de esta manera Constants.primer_valor.value
EDIT2:
Básicamente, lo que quiero saber es si hay alguna colección que se comporte de esta manera:
class Propiedades:
TELEFONO = 'teléfono'
NOMBRE = 'nombre'
APELLIDO = 'apellido'
@classmethod
@property
def values(cls):
return [x for x in dir(cls) if not x.startswith('__') and x != 'values']
print(Propiedades.TELEFONO)
> teléfono
print(Propiedades.NOMBRE)
> nombre
print(Propiedades.values)
> ['teléfono', 'nombre', 'apellido']
davy.ai
Una posible colección que satisface ambos requisitos es la clase
Enum
del móduloenum
en Python.Aquí tienes una implementación de ejemplo:
En este caso, definimos las dos constantes
FIRST_ONE
ySECOND_ONE
como miembros de la enumeraciónConstants
. Podemos acceder a cada constante por su nombre utilizando la notación de punto, comoConstants.FIRST_ONE.value
.Además, definimos un método de clase
values
que devuelve una lista de todos los valores constantes definidos en la enumeración, utilizando una comprensión de lista.Así, podemos acceder a los valores de la siguiente manera: