首页 > 解决方案 > 为什么当我在下面的代码中调用 del 函数时,对象没有被删除和重新实例化?

问题描述

为什么当我在下面的代码中调用 del 函数时,对象没有被删除和重新实例化?

class A:
    def __init__(self, a={}):
        if not ('1' in a):
            a['1']=1
        else:
            a['1']+=1

        print (a['1'])

    def __del__(self):
        del self.a

for i in range (5):
    a=A()

输出:

1,2,3,4,5

预期输出:

1,1,1,1,1

标签: pythonclassdictionaryobjectinstantiation

解决方案


当您在类的初始化中使用可变项作为默认参数时,它将在同一范围内创建的所有实例之间共享。您需要在类实例的每个初始化中创建一个字典,例如

class A:
    def __init__(self, a=None):
        a = {} if not a else a
        if not ('1' in a):
            a['1']=1
        else:
            a['1']+=1

        print (a['1'])


for i in range(5):
    a=A()

输出

1
1
1
1
1

推荐阅读