pythoncómo nombrar objetos si los creo en un for
Seguro que alguien me mata por hacer esta pregunta, pero llevo dándole y dándole y no lo saco. Tengo una clase luces de la cual quiero crear todas las luces que tenga en la escena.
Hago una tupla con las luces (guay).
Accedo a sus atributos por separado cuando instancio al objeto dentro de un for que recorre la tupla (guay).
Ahora, como puedo nombrar a cada objeto dentro del for? Creo los objetos de la forma.
Seqluces = luces(x y, z).
Pero no sé cómo hacer que nombre los objetos del modo luz + posición del iterable.
Edito: los objetos se crean en la forma <__main__. Luces instance at 0x00.>.
Es algo super básico, lo sé, pero no consigo sacarlo.
pythoncómo nombrar objetos si los creo en un for
Para que programa es el script?
pythoncómo nombrar objetos si los creo en un for
De todas formas, debería ser algo tipo: For i in range (len(tupla_luces)): Tupla_luces[i].name = luz + i. No sé si es lo que buscas.
pythoncómo nombrar objetos si los creo en un for
Hombre Pepius. Has visto que bien estoy aprendiendo Python ¿eh? Es para Autodesk Maya, pero concretamente esto creo que da igual para lo que sea, que es más dependiente de Python.
El atributo .name al instanciar un objeto existe? Acabo de intentarlo, pero tampoco funciona.
No obstante me has dado una idea. Cuando estaba creando el objeto lo hacía de la forma:
I = luces (x y, z).
Ahora lo he cambiado y he puesto.
El nombre = luces (x y, z).
Y ahora el objeto se llama de la misma manera que se llama el mismo objeto en la escena. Sigue sin ser lo que quería, pero me voy acercando.
pythoncómo nombrar objetos si los creo en un for
Por eso te preguntaba que en qué programa trabajas, porque los atributos de la clase luz depende del paquete. Pero a ver si me aclaro. Tu tienes una serie de luces en la escena, y las has puesto en una tupla y quieres renombrarlas? o estas creando las luces? Un saludo.
pythoncómo nombrar objetos si los creo en un for
Quiero crear una tupla con las luces que haya en la escena (ya creadas) para luego agruparlos en una ventana con los atributos intensidad, samples y color (que con este ya me pelearé por ser tres valores).
La clase ya la tengo hecha, creo que bien:
Class luces:
Def __init__ (self, lightintensity, lightcolor, subdivisiones).
Self, lightintensity = lightintensity.
Self, lightcolor = lightcolor.
Self, subdivisiones = subdivisiones.
#luego creo la tupla.
Tuplaluces = CMDS, ls (typ=vraylightrectshape).
#y el bucle.
For I in tuplaluces:
Intensidad = CMDS, getattr(i +.intensitymult).
Color.
Subdivisiones.
Luz = luces(intensidad, color, subdivisiones).
#aquí le meto un print para comprobar.
Print para la luz %s % i.
Print intensidad %i % intensidad.
Print subdivisiones y subdivisiones +.
Básicamente creo que no hay nada más, es que no podía copiar y pegar por que el ordenador con el que trabajo no huele internet por temas de rendimiento y virus. Con este código me devuelve:
Para la luz Vray Light Direct Shape 1.
Intensidad = 30.
Subdivisiones = 8. Un saludo y gracias.
Edito: está bien identificado y todo, es que, aquí no lo ha mostrado bien.
pythoncómo nombrar objetos si los creo en un for
Como quieres renombrar un objeto en Maya claro que es específico para cada software/SDK, en Maya lo puedes hacer con el comando rename.
No tengo Maya en frente, pero debería ser algo así.
Código:
import Maya, CMDS as CMDS.
For I in range (len(tupla_luces)):
Newname = luz%s % (i).
Cmds, rename (tupla_luces[i], newname)
pythoncómo nombrar objetos si los creo en un for
Cita:
Como quieres renombrar un objeto
en Maya claro que es específico para cada software/SDK, en Maya lo puedes hacer con el comando rename.
No tengo Maya en frente, pero debería ser algo así.
Código:
import Maya, CMDS as CMDS.
For I in range (len(tupla_luces)):
Newname = luz%s % (i).
Cmds, rename (tupla_luces[i], newname)
No ya, si no es que quiera renombrar el objeto. Quiero saber cómo se llama el objeto:clase que cree para apuntar a el dentro del código. No al objeto geométrico de Maya.
Es que no sé cómo apuntar a los objetos que instancio de la clase luz porque no sé cómo se llaman al crearlos.
pythoncómo nombrar objetos si los creo en un for
A ver, según lo que hace tu bucle, siempre asignas cada nueva instancia de la clase luces, a la variable luz, y para lo único que usas la tupla es para la longitud del bucle (si no recuerdo mal de Python). Entonces al final del bucle tendrías una sola instancia, dentro de la variable luz.
Yo haría algo así (ya te digo que de Autodesk Maya, ni idea, igual tienes que cambiar algo, o igual ni sirve).
For I in range (len(tupla_luces)):
Tupla_luces[i] = luces(arg1, arg2, arg3).
Eso te dejaría algo así:
Tupla_luces = [instancia_luz, instancia_luz, instancia_luz, instancia_luz.].
Y ahí es donde puedes después acceder a la luz que tú quieras. Para acceder a la primera luz, pues tupla_luces[0], y así sucesivamente. Un saludo.
pythoncómo nombrar objetos si los creo en un for
Lo que dice Pepius, en 3dsmax se llama array, e imagino que en Maya recibirá el mismo nombre.
pythoncómo nombrar objetos si los creo en un for
Una tupla es similar a un array, pero sus objetos son inmutables. Se accede de la misma manera que los arrays (tupla[x] donde x es el número del índice en la tupla).
Pero lo que quiero no es crear una tupla con las luces (y sus propiedades) dentro, esa ya está creada.
Lo que quiero es crear objetos (pero objetos de PO) de la clase luz con los argumentos que le pase al constructor desde la tupla.
pythoncómo nombrar objetos si los creo en un for
Vaya, menudo lío.
Cita:
Pero lo que quiero no es crear una tupla con las luces (y sus propiedades) dentro, esa ya está creada.
A esto te refieres a una tupla con las instancias de la clase luz?
pythoncómo nombrar objetos si los creo en un for
No, vaya que lío. A ver. Pongamos la clase coche. Para crear un objeto de la clase coche haríamos: Mi_coche = coche (). No? Y tendríamos una instancia de la clase coche a la que podríamos acceder de la forma:
Mi_coche, marca = Audi.
Mi_coche, color = rojo.
Ahora, teniendo un array con 5 coches con sus respectivos atributos (todos, no solo marca y color), querría crear 5 objetos de mi clase coche con los atributos marca y color extraídos de este array.
Consigo extraer los atributos, pero mi duda es que no sé cómo asignar nombres a cada objeto. ¿cómo conseguir que se llame mi_coche[índice de la tupla]. Coche?
Micoche[]. Coche () no funciona, por cierto. Es posible que sea porque tiene que ser un diccionario o una lista en lugar de una tupla?
pythoncómo nombrar objetos si los creo en un for
O sea, tú tienes un array, con los atributos del palo de esto: Array = {atributos1, atributos2, atributos3}. Y quieres crear tantas instancias como elementos haya en ese array, y con esos atributos? Algo tipo esto:
Coche1 = coche (atributos1).
Coche2 = coche (atributos2).
Coche3 = coche (atributos3).
pythoncómo nombrar objetos si los creo en un for
Claro. Pero hacerlo en un for por que el número de atributos del array es variable dependiendo de la escena. En teoría tendría que ser algo como:
For I in array:
Coche + I = coche (atributos).
No? Pero así no sale.
pythoncómo nombrar objetos si los creo en un for
No, eso no puedes hacerlo nunca de la vida. No puedes referenciar a otras variables con una string. Lo que tienes que hacer es lo que te digo más arriba. Esto es:
-Creas un nuevo array, aparte del de los atributos, que va a contener las instancias.
Entonces rellenas dicho array con las instancias con algo del palo de:
(las barras bajas son identificaciones).
For I in range (len(array_atributos)).
___ array_instancias[i] = coche (array_atributos[i]).
Tras esto, el array instancias contendrá algo como esto:
Array_instancias = [instancia_coche1, instancia_coche2.].
Así pues, cada elemento del array será una instancia con los atributos correspondientes.
Porque hacerlo así? Porque tú no puedes crear variables nuevas con nombres secuenciales al vuelo.
Ahora, para acceder a la instancia que tú quieras, no lo haces como coche1.loquesea, sino como array_instancias[0].
Espero que sea lo que buscas.
pythoncómo nombrar objetos si los creo en un for
Vale, lo siento por tardar tanto en contestar, pero hasta esta noche no he podido ponerme con eclipse otra vez. Es como dices tú Pepius, no puedo hacerlo nunca de la vida (me ha hecho gracia). No sabía que no podía hacer eso.
Lo he hecho ahora como has dicho tú. Ahora tengo un array (lista) con los objetos luz y sus atributos dentro y a los que puedo acceder mediante lista luces[i].
Simplemente estoy haciendo una ventana donde se muestren todas las luces con un slider para controlar su intensidad, pero todo en la misma ventana, sin tener que usar el attribute spread sheet.
Está genial, el fallo que le veo haciéndolo así es que, si quiero seguir implementando cosas, me va a costar más, por eso quería hacerlo con una clase propia, para tener más orden y control sobre el script. ¿ahora lo que tendría que hacer es una clase que heredará las propiedades de los objetos luces y borrara los atributos que no me sean necesarios para el script?
De todas formas, gracias a todos de verdad. Sois de gran ayuda. Cuando termine de hacer el script con Python para Maya quiero hacerlo para max y usarlo en el trabajo (aunque lo veo más complicado sin poder usar Python de forma sencilla).
pythoncómo nombrar objetos si los creo en un for
Hola. No he entendido muy bien el problema de fondo, pero respecto a las listas con nombre que querías hacer, creo que lo que buscas son diccionarios (en vez de arrays).
En el código que ponías en el mensaje #6.
Luz = {}.
For I in tuplaluces:intensidad = CMDS, getattr(i +.intensitymult).
Color.
Subdivisiones.
Luz[i] = luces(intensidad, color, subdivisiones)
.
Tendrías un diccionario luz, y accedería con.
luz[nombre_de_una_luz].
luz[otra].
En vez de.
luz[0].
luz[1].
Por lo demás, siempre puedes crear variables con nombres definidos en tiempo de ejecución. Por ejemplo:
For I in range (10):
locals()[variable+str(i)] = none
.
# esto te creara variable0, variable1, variable2.
Y en el caso de objetos, tienes la función setattr() para lo mismo.
For I in range (10):
setattr(unobjeto, variable + str(i), none)
.
# creara unobjeto, variable0, unobjeto, variable1, unobjeto, variable2.