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 clasePayload
. 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 deNone
. Luego, comparamos este conjunto con el conjunto de miembros de datos de la clase usando el métodointersection()
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