busqueda por cualquier atributo
chaoslord
virtual.yo en gmail.com
Mar Feb 15 17:21:08 CET 2005
Hola PythonEs, es mi primer mensaje a la lista. Hasta ahora aprendí mucho
simplemente leyendo las preguntas y las soluciones alternativas que se
discuten. Mi duda es la siguiente:
Supongamos una clase Cliente. Me gustaría saber cuál es la mejor forma de
realizar búsquedas por __cualquier__ atributo de la clase. La idea es que se
pueden especificar diferenes atributos a cada cliente, además de su numbre y
apellido.
El código de abajo es un ejemplo de lo que intento. Un problema con éste es
que no tengo forma de controlar los atributos que se pasan. El nombre, el
apellido y el ID deberían ser obligatorios.
Sugerencias??
(espero volver con una consulta más interesante)
#-------------------------------------------------------------------------------------------------------------
class Cliente:
def __init__(self,**atrs):
self.atrs = atrs
def comparar(self,**args):
"retorna True si el cliente cumple con los requisitos args"
salida = True
claves = args.keys()
for c in claves:
if str(args[c]) not in str(self.atrs[c]):
salida = False
break
return salida
CLIS=[]
CLIS.append(Cliente(ID='C01', nom='Marta',ape='Perez', DNI=2212 ))
CLIS.append(Cliente(ID='C02', nom='Juan',ape='Perez', DNI=3030, tel=0610 ))
CLIS.append(Cliente(ID='C03', nom='Juana',ape='Gomez', DNI=1221,
desc='asdasdasd' ))
for C in CLIS:
# clientes que tengan 'Juan' en el nombre
print "Busqueda 1", C.atrs['nom'], C.comparar(nom='Juan')
# clientes que tengan 'Perez' en el apellido
print "Busqueda 2", C.atrs['nom'], C.comparar(ape='Perez')
# clientes que tengan '22' en el DNI y 'J' en el apellido
print "Busqueda 3", C.atrs['nom'], C.comparar(DNI=22, ape='P')
#-------------------------------------------------------------------------------------------------------------
Más información sobre la lista de distribución Python-es