Как сбросить переменные / объекты класса в их начальные состояния? - PullRequest
2 голосов
/ 31 января 2020

У меня есть следующий класс:

class SummableSequence(object):
    initials=[]


    def __init__(self, *initial):

        for i in initial:
            self.initials.append(i)


    def __call__(self, i):
        l=self.initials
        new_number = sum(l)
        for j in range(i):
            new_number=sum(l)
            l.append(new_number)
            del l[0]
        return l

Когда я создаю его экземпляр с помощью:

new= SummableSequence(0,1)

Я ожидаю один и тот же вывод каждый раз, когда вызываю его как:

new(5)

вывод должен быть 5. Он отлично работает в первый раз, но при повторном запуске выход меняется. Я думаю, это потому, что значение инициалов списка не сбрасывается. Как я могу сбросить это значение к исходному значению, чтобы оно не менялось при каждом вызове?

1 Ответ

2 голосов
/ 31 января 2020

В функции __call__ вы можете создать новую копию self.initials и сохранить ее в l, а затем воздействовать на нее, чтобы оригинал не изменялся. Это можно сделать как:

l = self.initials.copy()

в первой строке __call__.

...