Closed micostabal closed 8 years ago
Hola, ¿qué es exactamente lo que quieres hacer? Por favor reformula tu pregunta porque no entendimos bien tu ejemplo :disappointed: Trata de usar un ejemplo chico mas explicativo.
Pero... me la jugaré por una respuesta. Asumiendo que lo que quieres es "usar los valores en la lista lista
como nombre de variables para los elementos creados en el loop de la clase Clase
" te recomiendo usar un diccionario (dict()
, aparecen en el material del curso). De esta forma puedes acceder a los objetos así:
lista = [nombre1, nombre2, ..., nombreN]
diccionario = dict() # O {}
for k in lista:
diccionario[k] = Clase(...)
print(diccionario["nombre1"])
EDIT: Creo que esto es... Si lo que quieres es que "reemplazar" el elemento en la lista con el objeto de la clase Clase
que crees, lo mejor que puedes hacer por ahora es crear una nueva lista y añadirle el nuevo objeto. Así funcionan los for
loops en Python. Para más detalles sobre Python con esto debería bastar...
Una pregunta que también resuelve la duda es ¿cómo puedo instanciar una clase, si tengo el nombre de la instancia solamente en formato string? Ya que si hago una lista con todos estos elementos después puede ser muy engorroso/comlpejo buscar estas instancias de manera fácil.
class Clase:
pass
a = "Clase"
print(eval(a)())
algo así? edit: no sé como poner códigos :dancers: , pero quería mostrar el eval()
NO HAGAS ESO. Usar eval es una mala práctica.
Python tiene mejores formas de hacer esto. Siguiendo lo que respondiste ahora usa un diccionario.
PD: No usen eval, cada vez que lo usan no muere un gatito, sino dos :(
Una de las soluciones que se puede hacer si tienes el nombre de la la clase es aprovecharte que todo en python es un objeto:
class Dog():
def __init__(self,name):
self.name = name
clases = {}
clases['dog'] = Dog
instancia1 = clases['dog']('Martin')
instancia2 = clases['dog']('Antonio')
Donde como la clase Dog de por si también es un objeto, luego puedes hacer una llamada a este, logrando el call del constructor, donde la instancia1 y la instancia2 son dos objetos totalmente distintos
Luego puedes tener un diccionario de la forma
clases = {
'clase1': clase1,
'clase2': clase2,
'clase3': clase3
}
\ Edit: No estoy seguro si puede servirte para que entiendas este concepto, que busques funciones lambda en python
sumar = lambda x,y: x+y
sumar(2,3)
sumar(4,5)
Buena, no sabía que se podía hacer eso, gracias!
y sorry por proponer el malévolo eval :(
Hola! ¿Cómo podría hacer para instanciar dentro de una sentencia "for" de forma que cada instancia tenga un nombre dado por otra lista de nombres? Algo así:
En stack aparece cómo hacerlo, pero sin nombres, muchas gracias