Class destructor -- strange behaviour

MonkeeSage MonkeeSage at gmail.com
Thu Dec 6 22:05:05 EST 2007


On Dec 6, 3:51 pm, Spes <Vlastimil.Ho... at gmail.com> wrote:
> Hi,
>
> I have this simple code:
> | #!/usr/bin/python
> | import codecs
> | import re
> | from copy import deepcopy
> |
> | class MyClass(object):
> |   def __del__(self):
> |     deepcopy(1)
> |
> | x=MyClass()
>
> but I get an error:
> | Exception exceptions.TypeError: "'NoneType' object is not callable"
> in <bound method MyClass.__del__ of <__main__.MyClass object at
> 0x6fcf0>> ignored
>
> The problem disappears if I do anything of this:
> 1. change
>      - from copy import deepcopy
>      + import copy
>     and call directly copy.deepcopy(1)
>
> or
> 2. don't store object to variable `x'
>
> or
> 3. don't import module `re'
>
> The first solution is OK, but I would like to know why it behaves so
> strange. We have tested on:
>
> - Mac OS X Tiger for PPC
> Python 2.3.5 (#1, Mar 20 2005, 20:38:20)
> [GCC 3.3 20030304 (Apple Computer, Inc. build 1809)] on darwin
>
> - Linux 64bit and 32bit
> Python 2.4.4 (#1, Oct 30 2007, 14:31:50)
> [GCC 4.1.2 (Gentoo 4.1.2 p1.0.2)] on linux2
> Python 2.5 (r25:51908, Jan 12 2007, 13:57:15)
> [GCC 4.0.2 20051125 (Red Hat 4.0.2-8)] on linux2
>
> Thanks for the explanation,
> Vlasta

I can't explain why, but it also works if you call del x manually
before the script exits.

Regards,
Jordan



More information about the Python-list mailing list