Estoy tratando de crear un script de Python que abra varias bases de datos y compare sus contenidos. En el proceso de creación de ese script, me he encontrado con un problema al crear una lista cuyos contenidos son objetos que he creado.Crear una lista de objetos en Python
He simplificado el programa hasta el mínimo de esta publicación. Primero creo una nueva clase, creo una nueva instancia de la misma, le asigno un atributo y luego lo escribo en una lista. Luego asigno un nuevo valor a la instancia y lo vuelvo a escribir en una lista ... y una y otra vez ...
El problema es que siempre es el mismo objeto, así que realmente solo estoy cambiando el objeto base. Cuando leo la lista, obtengo una repetición del mismo objeto una y otra vez.
Entonces, ¿cómo se escriben objetos en una lista dentro de un bucle?
Aquí está mi código simplificado
class SimpleClass(object):
pass
x = SimpleClass
# Then create an empty list
simpleList = []
#Then loop through from 0 to 3 adding an attribute to the instance 'x' of SimpleClass
for count in range(0,4):
# each iteration creates a slightly different attribute value, and then prints it to
# prove that step is working
# but the problem is, I'm always updating a reference to 'x' and what I want to add to
# simplelist is a new instance of x that contains the updated attribute
x.attr1= '*Bob* '* count
print "Loop Count: %s Attribute Value %s" % (count, x.attr1)
simpleList.append(x)
print '-'*20
# And here I print out each instance of the object stored in the list 'simpleList'
# and the problem surfaces. Every element of 'simpleList' contains the same attribute value
y = SimpleClass
print "Reading the attributes from the objects in the list"
for count in range(0,4):
y = simpleList[count]
print y.attr1
Entonces, ¿cómo (se añade, extiendo, copiar o lo que sea) los elementos de SimpleList de modo que cada entrada contiene una instancia diferente del objeto en lugar de todos apuntando a la misma ¿uno?
le sugiero que utilice iteradores en lugar de contadores: "para el artículo en simpleList:" se ve mucho mejor. – Mapad