[pyar] Atributo inmortal

Hystrix ego en hystrix.com.ar
Mie Jun 20 17:43:47 ART 2012


Buenas, el otro día estaba pisando atributos de un modulo
(monkeypatch) en un test de unittest y me encontré con esto:

    Python 2.7.3 (default, Apr 20 2012, 22:44:07)
    [GCC 4.6.3] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import urllib
    >>> urllib.z = 42
    >>> urllib.z
    42
    >>> del(urllib)
    >>> urllib.z
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    NameError: name 'urllib' is not defined
    >>> import urllib
    >>> urllib.z    # esperaba un AttributeError pero...
    42
    >>> reload(urllib)
    <module 'urllib' from '/usr/lib/python2.7/urllib.pyc'>
    >>> urllib.z    # el atributo sigue ahi, como recupero el modulo original?
    42
    >>>

El problema era que, en un test pisaba un atributo que, en otros
tests, tenia que mantener su valor original. Al final lo resolví
agregando un metodo a la clase que pisara el atributo pero antes se
guardara el valor original y despues, en el teardown, restauraba los
valores.

La pregunta es, por que pasa eso ? y mejor aun, por que me resultó
sorpresivo, que me falta entender para que ese comportamiento me
resulte logico? Ultima, hay alguna forma de que el modulo vuelva a
tener todos sus atributos originales?

-- 
Hystrix



More information about the pyar mailing list