类实例的出厂重置



我有一个Python代码,其结构如下:

for i in range (0,N):
ClassInstance = A(params)
... #some operation that modify the attribute of the instance "ClassInstance" of the class "A"

A是通过类组合关系连接到另一个类的类。

现在我想在每个循环周期重置类的实例和:

  • 我不想用不同的名字为每个循环创建一个新的实例
  • 我不想在A中为手册编写方法重置属性,因为它们很多,并不是全部在__init__方法中定义,而是在类的各种方法中传播。

我只是希望在每个循环中,相同的旧实例都具有与创建后相同的状态;为此,我将继续在A中设置复位方法,如下所示:

def reset(self, params):
self = A(params)

,修改代码结构如下:

ClassInstance = A(params)
for i in range (0,N):
ClassInstance.reset(params)
... #some operation that modify the attribute of the instance "ClassInstance" of the class "A"

这是一个安全的方式来失去跟踪ClassInstance的以前的历史,在每个周期从0重新开始,或者有一些缺点,我没有考虑?

注:在网上搜索时,我看到了一些以前类似的帖子(作为在Python中重置类的首选方式),但我想了解这种特定的方式是否有效,以及在进行过程中我是否应该小心一些事情。显然,如果这种方法是解决我的问题的错误方法,那么适合我情况的其他方法/解决方案也被很好地接受(但在这种情况下,我想了解问题在哪里)

您必须了解=操作符在给变量赋值时的作用,例如a=obj

不修改变量所指向的对象。这只是设置变量从那时起将引用哪个对象,而不使用旧对象。

因此ClassInstance = A()创建了一个新对象并将其赋值给变量ClassInstance

旧实例不再被引用,你不能再访问它。因此,在每个循环中,你都有一个新的新鲜实例。

同样,您不能通过执行self = A()来重置实例,您正在将一个新对象分配给本地变量self。没有触及self所引用的实例。此外,当方法返回时,self变量被释放,实例不再被引用,因此它被销毁。

一般来说,赋值给变量不做任何事情。就像给一个对象贴上标签一样。self和其他变量一样。没有什么特别的。

重置实例的唯一方法是手动设置其属性。

(这里的"object"one_answers"instance"意思相同)

顺便说一下,你不能在python中销毁对象。例如,您可以使用del a删除变量,但是当对象不再被引用时,它们将被自动销毁。