Resultados 1 al 18 de 18

Python como nombrar objetos si los creo en un for

  1. #1
    Fecha de ingreso
    Dec 2007
    Mensajes
    678

    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.
    Última edición por Sayden; 03-02-2009 a las 21:57

  2. #2
    Fecha de ingreso
    Feb 2004
    Mensajes
    4,832

    pythoncómo nombrar objetos si los creo en un for

    Para que programa es el script?

  3. #3
    Fecha de ingreso
    Feb 2004
    Mensajes
    4,832

    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.

  4. #4
    Fecha de ingreso
    Dec 2007
    Mensajes
    678

    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.

  5. #5
    Fecha de ingreso
    Feb 2004
    Mensajes
    4,832

    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.

  6. #6
    Fecha de ingreso
    Dec 2007
    Mensajes
    678

    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.
    Última edición por Sayden; 03-02-2009 a las 23:39

  7. #7
    Fecha de ingreso
    Mar 2004
    Mensajes
    3,694

    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)

  8. #8
    Fecha de ingreso
    Dec 2007
    Mensajes
    678

    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)
    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.

  9. #9
    Fecha de ingreso
    Feb 2004
    Mensajes
    4,832

    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.

  10. #10
    Fecha de ingreso
    Apr 2002
    Mensajes
    14,668

    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.

  11. #11
    Fecha de ingreso
    Dec 2007
    Mensajes
    678

    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.

  12. #12
    Fecha de ingreso
    Feb 2004
    Mensajes
    4,832

    pythoncómo nombrar objetos si los creo en un for

    Vaya, menudo lío.
    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?

  13. #13
    Fecha de ingreso
    Dec 2007
    Mensajes
    678

    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?

  14. #14
    Fecha de ingreso
    Feb 2004
    Mensajes
    4,832

    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).

  15. #15
    Fecha de ingreso
    Dec 2007
    Mensajes
    678

    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.

  16. #16
    Fecha de ingreso
    Feb 2004
    Mensajes
    4,832

    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.

  17. #17
    Fecha de ingreso
    Dec 2007
    Mensajes
    678

    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).

  18. #18
    Fecha de ingreso
    Jun 2005
    Mensajes
    1,206

    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.
    "La vida es como el tetris, cuando llegan los palos no sabes como encajarlos"
    <img src=images/smilies/molesto.gif border=0 alt= title=Sad class=inlineimg />

Temas similares

  1. Blender Python Blender - Asignar coordenadas a objetos desde una lista
    Por Ana1811 en el foro Plugins y Scripts
    Respuestas: 1
    : 31-03-2023, 11:37
  2. ZBrush Cómo nombrar las Subtool
    Por Grao en el foro Modelado
    Respuestas: 3
    : 06-06-2020, 13:17
  3. Detectar objetos con ratón Python BGE
    Por Juani en el foro Plugins y Scripts
    Respuestas: 2
    : 11-11-2015, 21:10
  4. General Cómo nombrar los diferentes tipos de 3d
    Por fighter41 en el foro Programas de Diseño 3D y CAD
    Respuestas: 3
    : 06-01-2012, 19:07
  5. Nombrar objetos hechos a mano de nombre serial
    Por juliux en el foro Plugins y Scripts
    Respuestas: 2
    : 10-07-2009, 17:28