Meador Inge added the comment: 'tempfile.NamedTemporaryFile' returns an instance of '_TemporaryFileWrapper' that wraps the created file object. The wrapper object implements '__getattr__' and we end up with a situation like the following simplified example where the wrapper gets destroyed before the looked up method is called:
$ cat test.py class S(object): def __init__(self): print("S.__init__") def __del__(self): print("S.__del__") def foo(self): print("S.foo") class T(object): def __init__(self, s): self.s = s print("T.__init__") def __getattr__(self, name): s = self.__dict__['s'] a = getattr(s, name) print("__getattr__('%s')" % name) if not isinstance(a, int): setattr(self, name, a) return a def __del__(self): print("T.__del__") T(S()).foo() $ ./python test.py S.__init__ T.__init__ __getattr__('foo') T.__del__ S.foo S.__del__ ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue18879> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com