Python类实例共享数组问题:如何让每个对象拥有独立数组?
解决每个类实例拥有独立数组的问题
你遇到的问题根源是类变量与实例变量的区别:
- 在类体中直接定义的
_array = []是类变量,所有mittelKlasse的实例会共享这个数组,所以第二个实例初始化时会在第一个实例的数组基础上追加元素,导致长度变成25。 - 而
_depth虽然也在类体定义,但你在__init__里用self._depth = depth将其重新绑定为实例变量,所以每个实例有独立的_depth。
修正方案
把_array的初始化移到__init__方法中,作为实例变量,让每个实例创建自己的数组:
class mittelKlasse: def __init__(self, depth): self._depth = depth self._array = [] # 每个实例初始化时创建独立的空数组 for i in range(self._depth): self._array.append(0) self._index = 0 if args.debug > 2: print(self._depth, len(self._array))
更简洁的写法
可以直接用列表乘法初始化数组,省去循环步骤:
class mittelKlasse: def __init__(self, depth): self._depth = depth self._array = [0] * depth # 直接创建指定长度的数组 self._index = 0 if args.debug > 2: print(self._depth, len(self._array))
修改后,每个实例都会拥有独立的_array,调试输出会符合你的预期:5 5和20 20。
内容的提问来源于stack exchange,提问作者martinpi
相关产品推荐
相关产品推荐

