Estoy ejecutando un bucle for dentro de una función que crea instancias de una clase para probarlas. en lugar de crear nuevas clases, parece estar reutilizando los mismos dos una y otra vez.por qué python está reutilizando una instancia de clase dentro de la función
¿Hay algo que me falta acerca de cómo se manejan las clases y las variables en los métodos de python?
cómo puedo generar un nuevo objeto para cada iteración del bucle
class CollectionSetImages(unittest.TestCase):
def test_keywordset(self):
"""Testing keyword queries by images equality """
for keyword in ['a','b','c','d','e','f','g']:
images_by_keyword = Image.keyword_query([keyword])
collection = Collection([keyword])
class_images = collection.images
print('colleciton: %s id: %s' % (collection,id(collection)))
self.assertEqual(images_by_keyword, class_images,)
aquí es la salida
colleciton: <tests.fakeimages._FakeCollection object at 0xb7c656cc> id: 3083228876
colleciton: <tests.fakeimages._FakeCollection object at 0xb7c656ec> id: 3083228908
colleciton: <tests.fakeimages._FakeCollection object at 0xb7c656cc> id: 3083228876
colleciton: <tests.fakeimages._FakeCollection object at 0xb7c656ec> id: 3083228908
colleciton: <tests.fakeimages._FakeCollection object at 0xb7c656cc> id: 3083228876
colleciton: <tests.fakeimages._FakeCollection object at 0xb7c656ec> id: 3083228908
colleciton: <tests.fakeimages._FakeCollection object at 0xb7c656cc> id: 3083228876
cuando uso los nombres de variables separadas consigo las identificaciones separadas para cada instancia como se esperaba :
collectionA = Collection(['a'])
print('collection: %s id: %s' % (collectionA,id(collectionA)))
collectionB = Collection(['f'])
print('collection: %s id: %s' % (collectionB,id(collectionB)))
collectionC = Collection(['f'])
print('collection: %s id: %s' % (collectionC,id(collectionC)))
salidas:
collection: <tests.fakeimages._FakeCollection object at 0xb7cbc8ac> id: 3083585708
collection: <tests.fakeimages._FakeCollection object at 0xb7cbccec> id: 3083586796
collection: <tests.fakeimages._FakeCollection object at 0xb7cbcd2c> id: 3083586860
Parece que tiene un objeto de simulación de prueba allí ... es posible que desee comprobar cómo la creación de instancias de su clase simulada entra en juego en el caso de prueba. –
@Jarret, buen punto, publicar la salida de los objetos de prueba en breve –