2010-05-05 11 views
5

Tengo una clase de python, y necesito agregarle un número arbitrario de listas arbitrariamente largas. Los nombres de las listas que necesito agregar también son arbitrarias. Por ejemplo, en PHP, haría esto:Agregando campos con nombre variable a las clases de Python

class MyClass { 

} 

$c = new MyClass(); 
$n = "hello" 
$c.$n = array(1, 2, 3); 

¿Cómo hago esto en Python?

También me pregunto si esto es algo razonable de hacer. La alternativa sería crear un dict de listas en la clase, pero dado que el número y el tamaño de las listas es arbitrario, me preocupaba que pudiera haber un golpe de rendimiento por esto.

Si se está preguntando qué estoy tratando de lograr, estoy escribiendo un intérprete de guiones súper liviano. El intérprete recorre una lista escrita por humanos y crea algún tipo de código de bytes. El código de bytes de cada función se almacenará como una lista nombrada después de la función en una clase de "aplicación". Tengo curiosidad por escuchar otras sugerencias sobre cómo hacer esto también.

Respuesta

5

Use setattr.

>>> class A(object): 
...  pass 
... 
>>> a = A() 
>>> f = 'field' 
>>> setattr(a, f, 42) 
>>> a.field 
42 
1

Lo escribiría de la manera más simple por ahora, y el siguiente perfil, y luego buscar para optimizar elementos específicos.

Recordemos el principio de KISS.

+0

De acuerdo, gracias –

+0

lol, seguro, pero yo sólo quería aclarar, suena como si estuviera todavía en la etapa de sueño, por lo que sería esperar hasta que tienes un prototipo de trabajo, porque esto suena como una optimización específica. La lista de Dict está bien. – jcolebrand

+0

Tengo algunas clases simuladas y las estoy llenando gradualmente. Estaba en la etapa en la que estaba descifrando cómo mantener los datos compilados de un script. Pero en realidad, hasta ahora he pensado y soñado mucho más que el código, porque hay hilos involucrados y estoy tratando de no volarme el culo :) –

Cuestiones relacionadas