2010-08-17 28 views
12

Así que estoy usando miembros de clase estáticos para poder compartir datos entre métodos de clase y métodos estáticos de la misma clase (solo habrá 1 instanciación de la clase). Entiendo esto bien, pero me pregunto cuándo se inicializarán los miembros estáticos. ¿Está en importación? En el primer uso de la clase? Porque voy a llamar a los miembros estáticos de esta clase de más de 1 módulo (por lo tanto, más de 1 declaración de importación). ¿Todos los módulos que acceden a los métodos estáticos comparten los mismos miembros de datos estáticos? Y si mi cliente principal elimina la instancia de mi clase, y luego la recrea (sin terminar por completo ni volver a importar cosas), ¿se conservarán mis miembros de datos?Miembros de clase estáticos python

Respuesta

13

Se inicializarán en el tiempo de definición de clase, lo que ocurrirá en el momento de la importación si está importando la clase como parte de un módulo. Esto asumiendo un estilo de "estática" miembro de la clase definición así:

class Foo: 
    bar = 1 

print Foo.bar # prints '1' 

Tenga en cuenta que, siendo este un miembro de la clase estática, no es necesario crear una instancia de la clase.

La instrucción de importación ejecutará el contenido de un módulo exactamente una vez, sin importar cuántas veces o dónde se ejecute.

Sí, los miembros estáticos se compartirán con cualquier código que acceda a ellos.

Sí, los miembros estáticos de una clase se mantendrán si se elimina un objeto cuyo tipo es que la clase:

# Create static member 
class Foo: 
    bar = 1 

# Create and destroy object of type Foo 
foo = Foo() 
del foo 

# Check that static members survive 
print Foo.bar # Still prints '1' 
+1

Sí me doy cuenta que no tengo que crear una instancia de la clase. Pero la instancia de clase necesita acceso a estos miembros, así como a otros módulos. Me preocupa que esté importando este módulo de varios otros módulos. ¿Eso significa que los miembros estáticos se restablecen para todos los módulos? ¿O cada módulo que lo importa tendrá su propio conjunto de miembros estáticos? – Falmarri

+0

Tu edición respondió mi pregunta, gracias =] – Falmarri

Cuestiones relacionadas