[Python-es] Import variables.

José Miguel Sánchez Alés aussiliar en online.fr
Sab Ene 19 14:26:58 CET 2008


Tengo el siguiente problema que no sé como resolver:

#v+
#!/usr/bin/python
#
# prueba.py
#

prec=2

class Tonteria(object):
   def muestraPrec(self,dec=None):
      if dec is None:
         dec=prec
      return dec
#v-

Es decir, un módulo inútil que lo único que hace es devolver una variable
definida como global en prueba.py.

Ahora me meto en python y pruebo hacer el 'import':

#v+
Python 2.4.4 (#2, Aug 16 2007, 02:03:40) 
[GCC 4.1.3 20070812 (prerelease) (Debian 4.1.2-15)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import prueba
>>> prueba.prec
2
>>> a=prueba.Tonteria()
>>> a.muestraPrec()
2
>>> prueba.prec=10
>>> a.muestraPrec()
10
>>> 
#v-

Vale es lo que quiero. Sin embargo, si hago el import así:

#v+
Python 2.4.4 (#2, Aug 16 2007, 02:03:40) 
[GCC 4.1.3 20070812 (prerelease) (Debian 4.1.2-15)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from prueba import *
>>> prec
2
>>> a=Tonteria()
>>> a.muestraPrec()
2
>>> prec=10
>>> a.muestraPrec()
2
>>> 
#v+

Puedo acceder a prec, cambiar su valor, pero el método de Tonteria que
accedía a él no se entera del cambio. ¿A qué se debe? ¿Se le ocurre a
alguien como solucionarlo (que no sea la solución trivial de meter prec
en la clase Tonteria y acceder como Tonteria.prec)?

-- 
En la vida humana sólo unos pocos sueños se cumplen,
la mayoría se roncan.
                  --- Enrique Jardiel Poncela ---
   Si     Dióxido de Silicio |        Debian GNU/Linux 
  /  \         (SiO2)        |    José Miguel Sánchez Alés
 O    O   Mineral de Cuarzo  |  aussiliar en online.fr | URL #257033


Más información sobre la lista de distribución Python-es