然后把中间的那示例代码复制下来,运行,也确实能得到正确的结果,但是,现在把代码里的所有“swaroop”换成“xxx1”,再把所
有“kalam”换成“yyy1”,再运行,就会得到一个奇怪的错误:
Exception AttributeError: "'NoneType' object has no attribute
'population'" in <bound method Person.__del__ of <__main__.Person
instance at 0xb68138ec>> ignored
也就是说,换了个变量名,就出错了。。。
这个邪门的问题,应该是python的内存回收机制造成的,换了名字以后,估计是Person这个类本身,先于类的对象被回收掉了~
关于这种问题,有啥文档不?或者有啥好办法可以避免么?
下面的那部分代码不要直接写在最外面,放到一个函数里。
比方说你写一个main函数,代码写在main函数里,最外面只写一个对main的调用。
就不会有这样的问题了。
解决方案是永远不要自己写__del__函数。这个函数没什么用,跟C++的析构函数不是一回事。
--
Best Regards,
Leo Jay
On May 31, 5:58 pm, Leo Jay <python.leo...@gmail.com> wrote:
> 2010/5/31 bones7456 <bones7...@gmail.com>:
>
> > 今天,有人问我一个python的问题,把我搞的郁闷了,给大家也看看:
> > 问题可以这样重现:打开《A Byte of Python》的类变量那节,可以看这里:
> >http://www.ibiblio.org/g2swap/byteofpython/read/class-and-object-vars...
大概吧,反正python的文档里是把这个问题列在bugs里的。
http://docs.python.org/c-api/init.html#Py_Finalize
不过话说回来,就算是bug也不严重,这个bug要有N多条件才出现:
1. 对象放在module那一层
2. 类重定义了__del__
3. __del__里用到类本身
4. module退出的时候刚好类比对象先析构
On May 31, 6:31 pm, Leo Jay <python.leo...@gmail.com> wrote:
> 2010/5/31 bones7456 <bones7...@gmail.com>:
>
那这个算python的bug吧?python完全可以建立一个各对象的依赖树,然后按次序干掉各部分的。
这种和变量名相关的特性,很不应该吧?
--
来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:pyth...@googlegroups.com
退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
详情: https://groups.google.com/group/python-cn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp