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 agregar valores en “__init__” a la lista de VALUES con la metaclase.

Cómo puedo agregar self.value1 y self.value2 al diccionario VALUES. Este es el propósito.
¿Cómo puedo agregar “self.value1” y “self.value2” a la lista VALUES dentro de la meta clase?

class Meta(type):
    VALUES = dict()

    def __new__(mcs, name, bases, attrs):
        for k, v in attrs.items():
            print(k, v)
        return super(Meta, mcs).__new__(mcs, name, bases, attrs)


class A(metaclass=Meta):
    def __init__(self):
        self.value1 = "Clase A"


class B(metaclass=Meta):
    def __init__(self):
        self.value2 = "Clase B"


class Main(A, B):
    def __init__(self):
        super(Main, self).__init__()


m = Main()
print(m.__dict__)

La salida que quería:
{‘value1’: ‘Clase A’,”value2″:”Clase B”}

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para añadir self.value1 y self.value2 al diccionario VALUES en la clase meta, podemos modificar el método __init__ de la clase Meta de la siguiente manera:

    class Meta(type):
        VALUES = dict()
    
        def __new__(mcs, name, bases, attrs):
            for k, v in attrs.items():
                print(k, v)
                if k.startswith('value'):
                    mcs.VALUES[k] = v
            return super(Meta, mcs).__new__(mcs, name, bases, attrs)
    

    Aquí, iteramos a través de los atributos de la clase que se está creando, y si el atributo comienza con la cadena “value”, lo añadimos al diccionario VALUES en la clase meta.

    Con esta modificación, cuando creamos una instancia de la clase Main e imprimimos su __dict__, obtenemos el resultado deseado:

    m = Main()
    print(m.__dict__)
    # Output: {'value1': 'Clase A', 'value2': 'Clase B'}
    

Comments are closed.