我有一个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
删除变量,但是当对象不再被引用时,它们将被自动销毁。