我很难找到如何动态实例化一个类的多个实例。例如,给我一个文件,在每一行上都有一个x、y、z和t坐标。我想把每一行放到一个叫做液滴的类中,它是唯一被x,y识别的,因为z的位置和时间随时间而变化。每个液滴都有一个哈希表,将时间映射到z坐标。
大的图片是,每一行输入指定一个水面的位置在一个时间点,我将在搅拌器使用python动画这一点。
我不知道要实例化多少个液滴,所以我不能做这样的事情
drop1 = Droplet(0,0)
drop2 = Droplet(0,1)
... and so on有没有一种方法可以让我在Python中使用惟一的x,y作为标识符来自动化类实例化?
发布于 2014-04-19 22:17:43
是的,只需在循环中这样做,并将对象放到列表中:
drops = []
for line in file:
x, y, z, t = parseFromFile(line)
drops.append(Droplet(x,y,z,t))或者,更像Pythonesque:
drops = [Droplet(*parseFromFile(line)) for line in file]这里的*接受parseFromFile返回的值(假定为4个),并将它们用作Droplet实例化的四个参数。
发布于 2014-04-19 22:25:11
如果您需要通过x和y方向唯一地标识它们(我猜,当出现一个具有相同坐标的新数组时,会覆盖它们),我将使用一个由x和y索引的二维数组,并将液滴对象存储在这个集合中。所以就像这样:
droplets[x][y] = Droplet(x,y,z,t)您必须了解如何初始化二维数组;您需要首先确保液滴在x和y方向都有足够的空间容纳所有液滴。但是这样你就可以通过它的x和y坐标来挑选出你想要的任何一个液滴。
发布于 2014-04-19 22:18:23
高水平
drops = []
with open('drop_file.txt', 'r') as f:
for line in f:
x, y = line.strip().split()
drops.append(Droplet(x, y))然后,当你需要对每个液滴做些什么的时候,你可以循环检查液滴的列表。
这假定您的文件是格式的。
X-y x1 y1
https://stackoverflow.com/questions/23176186
复制相似问题