您的位置:首页 > 编程语言 > Python开发

Python - 析构修改全局变量异常(__del__ of <__main__)

2014-04-10 20:44 417 查看

析构(__del__)修改全局变量异常(__del__ of <__main__)

本文地址: http://blog.csdn.net/caroline_wendy/article/details/23377053

异常描述: "Exception AttributeError: "'NoneType' object has no attribute 'number'" in <bound method Girl.__del__ of <__main__.Girl object at 0x01D60ED0>> ignored"
出现在析构(__del__)中, 操作类的变量, 有可能, 导致在析构类之后, 类的变量不存在, 造成异常;
注意Python文档中,__del__的警告信息, 可以查询;
也可参见: http://bytes.com/topic/python/answers/41024-python-bug-processing-__del__-method
解决方法, 析构时, 操作本类的全局变量(self.__class__).
代码:
# -*- coding: utf-8 -*-

#eclipse pydev, python 3.3
#by C.L.Wang

class Girl:

_number = 0

def __init__(self, name):
self.name = name
Girl._number += 1

def __del__(self):
Girl._number -= 1
#self.__class__.number -= 1

def sayName(self):
print(self.name)

@staticmethod
def howMany():
'''静态方法'''
print("I know {0:d} girls. ".format(Girl._number))

Girl.howMany()
wang = Girl('Wang')
Girl.howMany()
liu = Girl('Liu')
Girl.howMany()
print(list(globals()))
输出:
I know 0 girls.
I know 1 girls.
I know 2 girls.
['Girl', '__builtins__', '__name__', '__loader__', '__package__', '__cached__', '__doc__', '__file__', 'liu', 'wang']
Exception AttributeError: "'NoneType' object has no attribute '_number'" in <bound method Girl.__del__ of <__main__.Girl object at 0x01D82CF0>> ignored
Exception AttributeError: "'NoneType' object has no attribute '_number'" in <bound method Girl.__del__ of <__main__.Girl object at 0x01D70ED0>> ignored

因为'Girl'全局类, 出现在实例之前, 即'wang', 'liu', 所以出现警告, 修改:
def __del__(self):
#Girl._number -= 1
self.__class__._number -= 1
即可.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息