class 个实例的出厂重置

Factory Reset of a class instance

我有一个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 是一个 class 通过 class 组合关系链接到另一个的

现在我想在每个循环周期重置 class' 实例并且:

我只希望在每个周期中,相同的旧实例都采用刚创建后的相同状态;为此,我将继续在 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 重新启动,或者有一些我没有考虑的缺点是安全的方法吗?

P.S。 在网上搜索我看到了一些以前类似的 post(如 ),但我想了解这种特定方式是否有效,以及在进行时是否应该注意某些事情。 很明显,如果这种方法是解决我问题的错误方法,其他适合我情况的 approches/solutions 也被很好地接受(但在那种情况下我想了解问题出在哪里)

当你像 a=obj

这样的变量赋值时,你必须理解 = 运算符的作用

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

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

旧实例不再被引用,您无法再访问它。所以在每个循环中你都有一个新的实例。

此外,您无法通过执行 self = A() 来重置实例 您正在将新对象分配给局部变量 selfself 引用的实例未被触及。而且,当方法returns时,self变量被释放,实例不再被引用,所以被销毁

通常分配给变量不会做任何事情。就像给一个物体贴上标签一样。 self 和其他变量一样是一个变量。没什么特别的。

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

('object' 和 'instance' 在这种情况下意思相同)

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