Хранить экземпляр класса в другом методе класса - PullRequest
0 голосов
/ 18 октября 2018

Есть ли способ в Python 3, чтобы иметь возможность хранить экземпляр класса для использования в методе другого класса несколько раз?У меня есть такие классы ...

class ObjectOne:

    def __init__(self):

        #initializes multiple different instances of ObjectTwo
        self.ObjectTwoInstance = ObjectTwo(...)

    def print_output(self):

        #prints some output from initialized objects

class ObjectTwo:

    def __init__(self):

        #some initialization

    def change_object(self):
        """Changes some state of an ObjectTwo Instance"""

        #creates a new instance of ObjectOne, and overrides
        #the default ObjectOne instance's initialization of
        #ObjectTwo. (I want to be able to refer back to this
        #new instance of ObjectOne, and change that instead
        #of changing another default ObjectOne object)

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

В текущей ситуации всякий раз, когда я пытаюсь вызвать change_object, он изменит initTwo ObjectTwo в новом экземпляре ObjectOne, но просто обновляет инициализацию по умолчанию ObjectOne, потому что change_object не знает о новом обновленном экземпляре ObjectOne.в прошлый раз я это назвал.(Я стараюсь не сбивать с толку, но это лучший способ, которым я смог это объяснить)

Если есть более простой способ сделать это, или мне нужно реструктурировать мой код?В любом случае, я не уверен, как бы я поступил об этом.

(Отредактировано: изменено __init__ ObjectOne, чтобы сделать мой вопрос более ясным)

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Я решил проблему, передав ObjectOne ObjectTwo через ObjectTwo __init__, например:

class ObjectTwo:

    def __init__(self, object_one):
        self.object_one_instance = object_one

    def change_object(self):
        """Changes some state of an ObjectTwo Instance"""

        #modifies self.object_one_instance, and updates
        #the instance

Это похоже на то, что предложил ViAik, но нене требует создания нового класса или инициализации нового экземпляра.

0 голосов
/ 18 октября 2018

Я не уверен на 100% в том, что вы пытаетесь сделать, но, похоже, определенно есть лучший способ сделать это ...

Предполагая, что я вас правильно понял - выпытаясь создать отдельные экземпляры измененного ObjectOne для экземпляра ObjectTwo и затем использовать change_object на соответствующем экземпляре ObjectOne, я бы предложил создать измененный экземпляр ObjectOne в __init__:

class ObjectTwo:
    def __init__(self):
        self.ObjectOneInstance = ObjectOne()
        # override the default ObjectOne's initialization of ObjectTwo,
        # however you did it originally in change_object

        # some other initialization

    def change_object(self):
        # change some state of the ObjectTwo instance
        # perform operation on self.ObjectOneInstance

Я бы также предложил рассмотреть определение нового класса, такого как ObjectOneModified, который наследует ObjectOne;этот класс будет использоваться в ObjectTwo вместо ObjectOne, и вы можете изменить его __init__, не затрагивая первоначальное (по умолчанию) определение ObjectOne.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...