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

2024-09-27 13:26:44 发布

您现在位置:Python中文网/ 问答频道 /正文

Python3中有没有一种方法可以存储一个类的实例,以便在另一个类的方法中多次使用?我有这样的课。。。在

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_对象。可能有更好的方法来实现这一点,但本质上我希望能够保存更新的ObjectOne实例,以便下次调用change_object时可以引用该新实例,并更改该实例而不是基本初始化的ObjectOne实例。在

在当前情况下,每当我尝试调用change_object时,它都会在新的ObjectOne实例中更改ObjectTwo的init,但只更新ObjectOne的默认初始化,因为change_object不知道上次调用它时更新的ObjectOne实例。(我尽量不让人困惑,但这是我能解释的最好的方式)

如果有更简单的方法来实现这一点,或者我需要重新构造代码吗?不管怎样,我都不知道该怎么做。在

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


Tags: ofto实例方法instanceselfoutputobject
2条回答

我不能百分之百肯定你想做什么,但似乎有更好的方法来做这件事。。。在

假设我对您的理解是正确的-您试图为每个ObjectTwo的实例创建修改后的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

我还建议考虑定义一个新的类,比如继承ObjectOne;这个类将用在ObjectTwo而不是{},并且可以修改它的__init__,而不影响{}的原始(默认)定义。在

我最终通过将^{cd1>}传递到^{cd2>}到^{cd2>}的^{cd4>},从而解决了问题,如:

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建议的类似,但不涉及创建新类或初始化全新实例。

相关问题 更多 >

    热门问题