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