如何访问Python类中存储的数组 调用实例属性返回空数组解决方案
问题根因
fill_particles类的__init__方法仅完成了particles空列表的初始化,负责执行循环填充逻辑的fill()方法没有被触发调用,直接访问实例的particles属性自然只能拿到初始的空数组。
另外如果每次访问属性都重新写fill_particles().particles,相当于每次都创建一个全新的未填充实例,哪怕之前给其他实例填过内容,新实例的属性依然是空的。
修复方案
方案1:实例化后手动调用填充方法
先创建类实例,主动调用fill()完成数组填充后,再访问particles属性,参考代码:
class particle(object): def __init__(self,x,y,z): self.x=x self.y=y self.z=z class fill_particles(): def __init__(self): self.particles=[] def fill(self): for i in range(5): self.particles.append(particle(i,i+1,i+2)) # 调用示例 p = fill_particles() p.fill() # 执行填充逻辑 print(p.particles) # 此时可拿到填充完成的5个particle对象
方案2:初始化时自动执行填充
如果希望创建实例时就自动完成填充,不需要手动调用方法,可以在__init__方法末尾直接调用fill(),参考代码:
class fill_particles(): def __init__(self): self.particles=[] self.fill() # 实例初始化时自动触发填充 def fill(self): for i in range(5): self.particles.append(particle(i,i+1,i+2)) # 调用示例 p = fill_particles() print(p.particles) # 实例创建完成时已经填充完毕,直接访问即可
避坑提示
不要每次访问属性都重新实例化类,必须持有填充完成的那个实例的引用,再去访问它的particles属性,否则永远拿到的是新实例的空列表。
内容的提问来源于stack exchange,提问作者peyman movlani
相关产品推荐
相关产品推荐

