我是 python 新手,一直在研究 Swaroop CH 的“A Byte of Python”中的示例。我看到一些__del__
让我困惑的方法的行为。
基本上,如果我运行以下脚本(在 Python 2.6.2 中)
class Person4:
'''Represents a person'''
population = 0
def __init__(self, name):
'''Initialize the person's data'''
self.name = name
print 'Initializing %s'% self.name
#When the person is created they increase the population
Person4.population += 1
def __del__(self):
'''I am dying'''
print '%s says bye' % self.name
Person4.population -= 1
if Person4.population == 0:
print 'I am the last one'
else:
print 'There are still %d left' % Person4.population
swaroop = Person4('Swaroop')
kaleem = Person4('Kalem')
使用 Python 控制台(或 Spyder 交互式控制台)我看到以下内容:
execfile(u'C:\1_eric\Python\test1.py')
初始化 Swaroop
初始化 Kalemexecfile(u'C:\1_eric\Python\test1.py')
Initializing Swaroop
Swaroop 说再见
我是最后一个
Initializing Kalem
Kalem 说再见
我是最后一个
为什么在第二次运行__del__
之后立即调用该方法__init__
?
我猜测由于使用了相同的实例名称('swaroop' 和'kaleem'),它正在释放原始实例并对其进行垃圾收集。但是,这似乎对当前的人口数量造成了严重破坏。
这里发生了什么?
避免这种混乱的好方法是什么?
避免使用__del__
? 在重用它们之前检查现有的实例名称?...
谢谢,埃里克