在另一个类方法中存储一个类的实例

时间:2018-10-18 16:16:34

标签: python class methods initialization

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)

我的问题来自ObjectTwo中的change_object方法。可能有更好的方法来执行此操作,但是从本质上讲,我希望能够保存ObjectOne的更新后的新实例,以便下次我调用change_object时可以引用该新实例,并更改该实例而不是基础实例。初始化的ObjectOne实例。

在当前情况下,每当我尝试调用change_object时,它将在新的ObjectOne实例中更改ObjectTwo的init,但仅更新ObjectOne的默认初始化,因为change_object不知道上一次我更新的ObjectOne实例的情况。叫它。 (我正努力避免混淆,但这是我能够解释的最好方法)

如果有更简便的方法可以执行此操作,或者我需要重组代码?无论哪种情况,我都不确定该如何处理。

(编辑:更改了ObjectOne的__init__,以使我的问题更清楚)

2 个答案:

答案 0 :(得分:1)

我不确定您要做什么,但似乎肯定有更好的方法来做到这一点...

假设我正确理解了您-您正在尝试为res的每个实例创建经过修改的ObjectOne的单独实例,然后在{{ 1}},我建议在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的原始(默认)定义。

答案 1 :(得分:0)

我最终通过将ObjectOne的{​​{1}}传递到ObjectTwoObjectTwo来解决问题,就像这样:

__init__

这类似于ViAik的建议,但不涉及创建新类或初始化全新实例。