Почему объект не удаляется и не восстанавливается, когда я вызываю функцию del в приведенном ниже коде? - PullRequest
0 голосов
/ 17 июня 2020

Почему объект не удаляется и не восстанавливается, когда я вызываю функцию 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

1 Ответ

2 голосов
/ 17 июня 2020

Когда вы используете изменяемый элемент в качестве параметра по умолчанию в инициализации класса, он будет использоваться всеми экземплярами, созданными в одной области. Вам нужно создать dict в каждом init экземпляров класса, например

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()

Output

1
1
1
1
1
...