首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python中的动态对象实例化

Python中的动态对象实例化
EN

Stack Overflow用户
提问于 2014-04-19 22:13:48
回答 3查看 297关注 0票数 3

我很难找到如何动态实例化一个类的多个实例。例如,给我一个文件,在每一行上都有一个x、y、z和t坐标。我想把每一行放到一个叫做液滴的类中,它是唯一被x,y识别的,因为z的位置和时间随时间而变化。每个液滴都有一个哈希表,将时间映射到z坐标。

大的图片是,每一行输入指定一个水面的位置在一个时间点,我将在搅拌器使用python动画这一点。

我不知道要实例化多少个液滴,所以我不能做这样的事情

代码语言:javascript
复制
drop1 = Droplet(0,0)
drop2 = Droplet(0,1)
... and so on

有没有一种方法可以让我在Python中使用惟一的x,y作为标识符来自动化类实例化?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-19 22:17:43

是的,只需在循环中这样做,并将对象放到列表中:

代码语言:javascript
复制
drops = []
for line in file:
    x, y, z, t = parseFromFile(line)
    drops.append(Droplet(x,y,z,t))

或者,更像Pythonesque:

代码语言:javascript
复制
drops = [Droplet(*parseFromFile(line)) for line in file]

这里的*接受parseFromFile返回的值(假定为4个),并将它们用作Droplet实例化的四个参数。

票数 3
EN

Stack Overflow用户

发布于 2014-04-19 22:25:11

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

代码语言:javascript
复制
droplets[x][y] = Droplet(x,y,z,t)

您必须了解如何初始化二维数组;您需要首先确保液滴在x和y方向都有足够的空间容纳所有液滴。但是这样你就可以通过它的x和y坐标来挑选出你想要的任何一个液滴。

票数 2
EN

Stack Overflow用户

发布于 2014-04-19 22:18:23

高水平

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23176186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档