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

问题描述 投票:0回答:1

为什么当我在下面的代码中调用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
python class dictionary object instantiation
1个回答
1
投票

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

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'])

    def __del__(self):
        del self.a

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

输出

1
1
1
1
1
© www.soinside.com 2019 - 2024. All rights reserved.