2014-01-28 122 views
3

我有一个叫做Points的类,我需要创建100个点。 我需要做的是这样的:一个类的多个实例

class Point(object) 
... 

for i in range(1,100): 
    pi = Point() 

点应该被命名为p1p2,... p100

该线以上不工作,效果显着。

现在的问题是:我知道我可以在循环内使用exec来创建100点,但是有没有更好的方法可以不使用exec

+0

请参阅[_你为什么不想动态创建变量_](http://stupidpythonideas.blogspot.com/2013/05/why-you-dont-want-to-dynamically-create.html)。 – martineau

回答

8

您可以使用列表中理解的几个对象:

# 100 points in list 
points = [Point() for _ in range(100)] 
5

创建/使用动态变量被认为是Python中的坏习惯。这是很容易让你失去跟踪他们,导致名称冲突等

相反,你可以使用一个dict comprehensionstr.format创建命名实例的字典:

points_dict = {"p{}".format(x):Point() for x in range(1, 101)} 

然后,您可以按照如下名称访问这些实例:

points_dict["p1"] 
points_dict["p10"] 
# etc. 
+1

您的索引和范围端点是错误的。 – user2357112

+0

固定。我实际上改变了我的答案,使用字典理解,以便实例被命名为OP所需。 – iCodez

0

非常感谢您的回答。我从他们身上学到了很多东西。

无论如何,我不需要点或点的字典列表。

想象我开始写作:

P1 =点() P2 =点() 。 。 。 p100 =点()

我将获得100分,没有更多。那是我需要的。我相信把上面的100行代码放在程序中并不是一个好习惯!此外,创建的点数可能会变化。这就是为什么我认为应该有一个优雅的方式来做到这一点。谢谢。