2014-01-28 59 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行代碼放在程序中並不是一個好習慣!此外,創建的點數可能會變化。這就是爲什麼我認爲應該有一個優雅的方式來做到這一點。謝謝。