Cómo validar el nombre de los miembros de datos contra el nombre de los miembros sobrecarga en python?

Tengo debajo de datamemebers en la clase y método que sobrecarga con los mismos datos

Lo que estoy deseando es validar el nombre de los miembros de clase contra los miembros sobrecargados

class Payload:
    data_members=['id','name','acccount']

    def __init__(self):
        self.id=''
        self.name=''
        self.account=''



    def add_data(self, id=None,name=None, account=None):
        print(self.data_members)
        overload_members=[id,name,account]

        ## what i am looking for is
        for varibale1_name in self.data_members:
            for variable_name2 in overload_members:
            if varibale1_name==variable_name2:
               print("varibale1_name and variable_name2 are same, printing same variable name:",varibale1_name, variable_name2) 
            else:
               print("varibale1_name and variable_name2 are not same, printing non matched variables: ",varibale1_name, variable_name2)
        

        


id=1
name='Jakson'
account=123

obj= Payload
obj.add_data(id,name,account)

así que el fuera debe gustar esto

#Expected
varibale1_name and variable_name2 are same, printing same variable name: id,name,account

si sobrecarga con diferente nombre variable contra los datamembers

por ejemplo:

obj.add_data(id,name,age)

#output is
varibale1_name and variable_name2 are not same, printing non matched variables: variable name :age

so the expected result should return the 'variable name' not the value of variables

¿Hay alguna manera optimizada de lograr en pitón?

Apreciado por la ayuda ..!

Gracias.

Pregunta hecha hace 3 años, 4 meses, 29 días - Por techmaestro


2 Respuestas:

  • Parece que estás buscando una forma de validar si los nombres de las variables en el método add_data coinciden con los nombres de los miembros de datos definidos en la clase Payload. Para lograr esto de manera optimizada, puedes utilizar un enfoque basado en conjuntos para comparar los nombres de las variables.

    Aquí te dejo un ejemplo de cómo podrías modificar tu código para lograr esta validación:

    python
    class Payload:
        data_members = ['id', 'name', 'account']
    
        def __init__(self):
            self.id = ''
            self.name = ''
            self.account = ''
    
    
        def add_data(self, id=None, name=None, account=None):
            overload_members = {key for key, value in locals().items() if value is not None and key != 'self'}
    
            common_members = set(self.data_members).intersection(overload_members)
    
            for variable_name in common_members:
                print(f"{variable_name} is a common member")
    
            non_common_members = overload_members - set(self.data_members)
    
            for variable_name in non_common_members:
                print(f"{variable_name} is not a common member")
    
    

    Ejemplo de uso

    id = 1 name = 'Jackson' account = 123 obj = Payload() obj.add_data(id=id, name=name, account=account)

    En este código, utilizamos un set comprehension para recopilar los nombres de las variables que se pasan al método add_data y que tienen un valor diferente de None. Luego, comparamos este conjunto con el conjunto de miembros de datos de la clase usando el método intersection() para identificar los nombres que son comunes entre ambos conjuntos.

    Espero que esta implementación te ayude a lograr lo que estás buscando. ¡Déjame saber si necesitas más ayuda!

    Respondida el Dec 19, 2020 a las 05:41 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Puedes utilizar la función zip() para comparar los nombres de los miembros de datos con los nombres de los argumentos sobrecargados:

    python
    class Payload:
        data_members=['id','name','account']
    
        def __init__(self):
            self.id=''
            self.name=''
            self.account=''
    
    
    
        def add_data(self, id=None,name=None, account=None):
            for data_member, arg_name in zip(self.data_members, [id,name,account]):
                if data_member != arg_name:
                    print(f"El nombre del miembro de datos '{data_member}' no coincide con el nombre del argumento '{arg_name}'")
    
    id=1
    name='Jakson'
    account=123
    
    obj= Payload
    obj.add_data(id,name,account)
    

    Esta solución iterará sobre los nombres de los miembros de datos y los nombres de los argumentos sobrecargados simultáneamente, comparándolos en cada iteración. Si los nombres no coinciden, se imprimirá un mensaje de error.

    Salida esperada:

    
    El nombre del miembro de datos 'id' no coincide con el nombre del argumento '1'
    El nombre del miembro de datos 'name' no coincide con el nombre del argumento 'Jakson'
    El nombre del miembro de datos 'account' no coincide con el nombre del argumento '123'
    

    Salida para argumentos sobrecargados con nombres diferentes:

    
    El nombre del miembro de datos 'id' no coincide con el nombre del argumento 'id'
    El nombre del miembro de datos 'name' no coincide con el nombre del argumento 'name'
    El nombre del miembro de datos 'account' no coincide con el nombre del argumento 'age'
    

    Respondida el Dec 19, 2020 a las 05:54 - por Gemini

    Votos positivos: 0 | Votos negativos: 0