Python 在另一个类方法中存储一个类的实例
在Python3中是否有一种方法可以多次存储一个类的实例以供另一个类的方法使用?我有这样的课Python 在另一个类方法中存储一个类的实例,python,class,methods,initialization,Python,Class,Methods,Initialization,在Python3中是否有一种方法可以多次存储一个类的实例以供另一个类的方法使用?我有这样的课 class ObjectOne: def __init__(self): #initializes multiple different instances of ObjectTwo self.ObjectTwoInstance = ObjectTwo(...) def print_output(self): #prints som
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\u对象。可能有更好的方法来实现这一点,但本质上我希望能够保存更新后的ObjectOne新实例,以便下次调用change_object时,我可以引用该新实例,并更改该实例,而不是基本初始化的ObjectOne实例
在当前情况下,每当我尝试调用change_对象时,它都会在新的ObjectOne实例中更改ObjectTwo的init,但只是更新ObjectOne的默认初始化,因为change_对象在我上次调用它时不知道更新的ObjectOne实例。(我尽量不让人迷惑,但这是我能解释的最好的方式)
如果有更简单的方法,或者我需要重新构造代码?不管是哪种情况,我都不知道该怎么办
(编辑:更改了ObjectOne的
\uuuu init\uuuu
,以使我的问题更清楚)我不能100%确定您想做什么,但似乎有更好的方法来做到这一点
假设我正确理解了您的意思-您正在尝试为ObjectTwo
的每个实例创建修改后的ObjectOne
的单独实例,然后在ObjectOne
的相应实例上使用change\u object
,我建议在\uuu init\uuu
中创建修改后的ObjectOne
实例:
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
的ObjectOneModified
;该类将在ObjectTwo
中使用,而不是在ObjectOne
中使用,并且您可以修改其\uuuuu init\uuuu
而不影响原始类(默认)ObjectOne
的定义我通过ObjectTwo
的init\uuuu
将ObjectOne
传递给ObjectTwo
来解决问题,如下所示:
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的建议类似,但不涉及创建新类或初始化全新实例 我想这正是我想要的,但是,您讨论的方法不会导致无限递归错误吗?由于我的
ObjectOne
初始化了ObjectTwo
的实例,如果我实现了行self.ObjectOneInstance=ObjectOne()
它将尝试初始化更多的ObjectTwo
实例,这将尝试初始化更多的self.ObjectOneInstance的
@SignalProcessed,我认为“正在更新ObjectOne的默认初始化“您的意思是要删除创建object两个
实例等。在这种情况下,我建议定义一个不同的类,通过不创建新的ObjectTwo
s来继承ObjectOne
并重写其\uuuu init\uuuu
。我将采纳您的建议,创建一个继承ObjectOne的新类。我只想问最后一个问题:如何在继承ObjectOne的新子类中重写ObjectOne的原始\uuuu init\uuuu
?ObjectOne是否仍然必须作为超级调用,这将导致与以前相同的问题?只需在新对象中定义\uuuu init\uuuu
,就像在普通对象中一样。您的IDE可能会对您大喊大叫,但如果这是您必须要做的,它应该可以工作。调用super()。\uuuu init\uuuuu()
在这种情况下是不必要的。IDE对我大喊大叫,以至于它无法执行代码。我提出了一个解决方案,并将其作为另一个答案发布。谢谢你的帮助,你一定把我引向了正确的方向。