2011-10-24 12 views
10

Soy relativamente nuevo en python Me gustaría ejecutar un bloque de código solo una vez para una clase. Como el bloque estático en java.Hay bloque estático en clase en python

por ejemplo:

class ABC: 
    execute this once for a class. 

¿Hay algún tipo de opciones disponibles en Python?

En Java lo escribimos así. Esto se ejecuta solo una vez para una clase, en el momento en que se carga la clase. No para cada creación de objetos

public class StaticExample{ 
    static { 
     System.out.println("This is first static block"); 
    } 
} 

Gracias

+1

¿No quiere poner su código en la función '__init__'? –

+2

Supongo que no. __init__ recibe un llamado en cada creación de objeto. Necesito que lo ejecute solo una vez. –

+1

@ root45: se llamaría una vez por * instancia * de la clase. M S pide algo que se llama una vez por clase. – Crisfole

Respuesta

9

Para hacer esto sólo hay que poner el código directamente bajo la definición de clase (paralelo a las definiciones de función para la clase.

Todo código directamente en la clase se ejecuta al crear ese tipo en t el espacio de nombres de la clase. Ejemplo:

class Test: 
    i = 3 
    y = 3 * i 
    def testF(self): 
     print Test.y 

v = Test() 
v.testF() 
# >> 9 

sólo para llenar el último bit de información para usted: la función de su método también se están ejecutando def s (al igual que consiguen "ejecutados" cuando se define una función en el espacio de nombres global), pero ellos no son llamados Resulta que ejecutar un def no tiene resultados obviamente visibles.

La orientación a objetos de Python es bastante inteligente, ¡pero lleva un poco de tiempo entenderlo! Sigue así, es un lenguaje muy divertido.

+0

Gracias, Esto ayuda. –

+0

No acceda a la variable estática/variable de clase con el uso self.y. Al menos use Test.y en su lugar – Artur

+0

Huh, nunca me di cuenta de que lo hice. Fijo. – Crisfole

5
>>> class MyClass(): 
...  print "static block was executed" 
... 
static block was executed 
>>> obj = MyClass() 
>>> 

Ver aquí para obtener más información acerca de las variables/funciones estáticas en Python: Static class variables in Python

+0

Gracias, Esto ayuda. –

Cuestiones relacionadas