es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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']
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Una posible colección que satisface ambos requisitos es la clase Enum del módulo enum en Python.

    Aquí tienes una implementación de ejemplo:

    from enum import Enum
    
    class Constants(Enum):
        FIRST_ONE = 'Primero'
        SECOND_ONE = 'Segundo'
    
        @classmethod
        def values(cls):
            return [c.value for c in cls]
    

    En este caso, definimos las dos constantes FIRST_ONE y SECOND_ONE como miembros de la enumeración Constants. Podemos acceder a cada constante por su nombre utilizando la notación de punto, como Constants.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:

    print(Constants.FIRST_ONE.value)
    # Output: 'Primero'
    
    print(Constants.SECOND_ONE.value)
    # Output: 'Segundo'
    
    print(Constants.values())
    # Output: ['Primero', 'Segundo']
    

Comments are closed.