繁体   English   中英

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

[英]Store an instance of a class within another class method

在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的初始化,但是只是更新ObjectOne的默认初始化,因为change_object不知道我上次调用它时更新的ObjectOne实例。 (我正努力避免混淆,但这是我能够解释的最好方法)

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

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

我不确定您要做什么,但似乎肯定有更好的方法可以做到...

假设我理解正确的你-你想创建修改后的单独实例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的原始(默认)定义。

我最终通过将解决我的问题ObjectOneObjectTwo通过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的建议,但不涉及创建新类或初始化全新实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM