2012-04-09 15 views
8

estoy tratando de declarar una variable global desde dentro de una clase de esta manera:¿Cómo declarar una variable global desde dentro de una clase?

class myclass: 
    global myvar = 'something' 

lo necesito para tener acceso fuera de la clase, pero yo no quiero tener que declararlo fuera del archivo de clase . Mi pregunta es, ¿es esto posible? Si es así, ¿cuál es la sintaxis?

+0

¿Por qué no hacerlo de esta manera: 'mivar mundial;' y en línea siguiente, cambiarlo? – hjpotter92

+1

Parece que deseaba algo diferente a lo que preguntó – 0xc0de

+0

FJ respondió la pregunta tal como lo hice, hice +1, zigg obtuvo la intención (sin tener que escribir myclass.var una y otra vez) y se supone que es una mejor práctica, así Apuntaré a las personas futuras con la misma pregunta que llega de la búsqueda a su respuesta. – Adam

Respuesta

12

En su pregunta, se especifica "fuera del archivo principal". Si no decir "fuera de la clase", entonces esto va a trabajar para definir una variable de nivel de módulo:

myvar = 'something' 

class myclass: 
    pass 

A continuación, puede hacer, asumiendo la clase y definiciones de las variables se encuentran en un módulo llamado mymodule:

import mymodule 

myinstance = myclass() 
print mymodule.myvar 

Además, en respuesta a su comentario sobre la respuesta de @ phihag, puede acceder a mivar sin reservas, así:

from mymodule import myvar 

print myvar 

Si desea acceder a él simplemente la abreviatura de anoth archivo er al tiempo que definirla en la clase:

class myclass: 
    myvar = 'something' 

a continuación, en el archivo donde se necesita para acceder a ella, asignar una referencia en el espacio de nombres locales:

myvar = myclass.myvar 

print myvar 
+0

Lo siento, quise decir fuera de la clase. El archivo que llama a la clase. – Adam

+0

Ver la edición. Lo mejor es mantener el control sobre sus espacios de nombres trayendo solo lo que necesita. De lo contrario, puede terminar refiriéndose a algo que no tenía intención de hacer, a medida que su programa se hace más grande ... – zigg

3

Simplemente puede asignar una propiedad a la clase:

class myclass(object): 
    myvar = 'something' 

# alternatively 
myclass.myvar = 'else' 

# somewhere else ... 
print(myclass.myvar) 
+0

Entiendo que esto funciona, mi pregunta es si la configuración de una variable global es posible para evitar tener que escribir "myclass". mucho. ¿Es posible? Gracias. – Adam

+2

@fryy Posible en teoría, pero una muy mala idea y su razón ** no ** lo justifica. Esta es la forma correcta de hacerlo. – delnan

+2

@fryy generalmente usando la instrucción "global" en cualquier parte de python es una indicación de mal diseño (aunque no siempre, por eso existe). A menudo, las personas que vienen de otros idiomas ven esto como algo análogo a lo que están acostumbrados de algún idioma anterior. –

3

realmente debería reconsiderar si no es realmente necesario, parece una forma extraña de estructurar tu programa y debes usar el método de phihag, que es más correcto.

Si decide que todavía quiere hacer esto, aquí es cómo puede:

>>> class myclass(object): 
...  global myvar 
...  myvar = 'something' 
... 
>>> myvar 
'something' 
+0

Gracias, voy a utilizar el "sugerido por mymodule myvar" zigg. Gracias por contestar la pregunta. – Adam

3

Para responder a su pregunta

global s 
s = 5 

lo hará. Sin embargo, tendrás problemas dependiendo de en qué parte de tu clase hagas esto. Manténgase alejado de las funciones para obtener el comportamiento que desea.

3

Puede hacer como

# I don't like this hackish way :-S 
# Want to declare hackish_global_var = 'something' as global 
global_var = globals() 
global_var['hackish_global_var'] = 'something' 
Cuestiones relacionadas