Сбросить объект в исходное состояние Python - PullRequest
0 голосов
/ 29 марта 2020

Я ищу указатель на соответствующий способ сброса объекта (код планирования в настоящее время). То, о чем я сейчас думаю, ниже. Единственная проблема заключается в том, что есть много других атрибутов, определенных в других методах, которые не удаляются, когда я вспоминаю init. Это не проблема для способа, которым я структурировал свой объект (все атрибуты, не определенные в init, всегда пересчитываются при запуске метода моделирования). Но я не чувствую, что это чисто - я бы предпочел сделать полный сброс до состояния инициализации и не иметь никаких атрибутов, определенных вне init.

class foo:

        def __init__(self, formaat):
                self.format == formaat
                # process format below:
                if formaat == one:
                        self.one = 1
                if formaat == two:
                        self.two = 2
                # ... other parameter imports below - dependent on the value of self.one/self.two

        def reset(self, formaat):
                self.__init__(formaat)

        def simulate(self):
                self.reset(self.format)
                print("doing stuff")

Одна вещь, которую я попробовал, - это метод для копирования себя. Хотя я думаю, что буквально нет разницы между выполнением этого и созданием копии объекта в сценарии запуска и переназначением его.

class foo:

    def __init__(self, formaat):
                self.format = formaat
                # process format below:
                if formaat == one:
                        self.one = 1
                if formaat == two:
                        self.two = 2
                # ... other parameter imports below

    def copymyself(self):
        self.copy = copy.deepcopy(foo(self.format)) 

    def simulate(self):
        print("doing stuff")

В идеале я хочу, чтобы метод имитации сбрасывался сам при запуске каждый раз , В приведенном выше примере кода мне нужно будет выполнить следующий скрипт запуска.

a = foo()
# loop the code below
a.copymyself()
a.simulate()
a = a.copy

Я предпочитаю иметь одну строку - a.simulate (), как в случае с методом сброса.

1 Ответ

1 голос
/ 29 марта 2020

Каждый новый запуск заслуживает нового (чистого) объекта.

...