我无法找到如何动态实例化类的多个实例。 例如,我给出了一个在每一行上都有x,y,z和t坐标的文件。 我想将每一行放入一个名为Droplet的类中,该类由x,y唯一标识,因为z位置和时间随时间变化。 每个Droplet都有一个哈希表,可以将时间映射到az坐标。

大图是每一行输入都指定了某个时间点水面的位置,我将使用python在Blender中设置动画。

我遇到问题的部分我不知道有多少Droplet实例需要实例化,所以我做不了类似的事情

drop1 = Droplet(0,0)
drop2 = Droplet(0,1)
... and so on

有没有办法让我使用唯一的x,y作为Python中的标识符来自动化类实例化?

===============>>#1 票数:3 已采纳

是的,只是在循环中执行它并将对象放入列表:

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返回的(可预测的四个)值,并将它们用作Droplet实例化的四个参数

===============>>#2 票数:2

如果你需要通过x和y方向唯一地识别它们(并且,我想,当一个具有相同坐标的新方法出现时覆盖它们),我将使用由x和y索引的二维数组,并存储该集合中的Droplet对象。 所以像这样:

droplets[x][y] = Droplet(x,y,z,t)

您将不得不阅读如何初始化二维数组; 你需要首先确保液滴在x和y方向都有足够的空间让所有液滴都适合。但是这样你可以通过x和y坐标选出你想要的任何特定液滴。

===============>>#3 票数:1

在很高的水平

drops = []
with open('drop_file.txt', 'r') as f:
    for line in f:
        x, y = line.strip().split()
        drops.append(Droplet(x, y))

然后,当您需要对每个液滴做一些事情时,您可以遍历液滴列表。

这假定您的文件采用的格式

XY

x1 y1

  ask by user2619824 translate from so

未解决问题?本站智能推荐:

关注微信公众号