2011-08-18 52 views
0

我是python的新手,但我有很多C++,Java和.NET的經驗。我希望有人能夠解釋爲什麼這個示例程序的工作方式如何,以及如何將其改變爲以我希望的方式工作。Python中列表的問題

基本上,我試圖創建一個對象列表,並且列表中的每個對象都包含一個對象列表。最後,子列表都是相同的列表,而不是對其父類的實例唯一的。

class Obj1(object): 
    list_of_obj2 = [] 
    name = '' 

class Obj2(object): 
    name = '' 

list_of_obj1 = [] 

for i in range(2): 
    new_obj1 = Obj1() 
    new_obj1.name = "obj1_%s" % i 
    print "Creating Object1 named %s" % new_obj1.name 

    for j in range(2): 
     new_obj2 = Obj2() 
     new_obj2.name = "...obj2_%s_%s" % (i, j) 

     new_obj1.list_of_obj2.append(new_obj2) 
     print "...Added Object2 named %s to %s list" % (new_obj2.name, new_obj1.name) 

    list_of_obj1.append(new_obj1) 
    print "Added Object1 named %s to master list" % (new_obj1.name) 

print "" 

for obj in list_of_obj1: 
    print "%s has %s items in list" % (obj.name, len(obj.list_of_obj2)) 
    for obj2 in obj.list_of_obj2: 
     print "...%s" % obj2.name 

程序的輸出:

Creating Object1 named obj1_0 
...Added Object2 named ...obj2_0_0 to obj1_0 list 
...Added Object2 named ...obj2_0_1 to obj1_0 list 
Added Object1 named obj1_0 to master list 
Creating Object1 named obj1_1 
...Added Object2 named ...obj2_1_0 to obj1_1 list 
...Added Object2 named ...obj2_1_1 to obj1_1 list 
Added Object1 named obj1_1 to master list 

obj1_0 has 4 items in list 
......obj2_0_0 
......obj2_0_1 
......obj2_1_0 
......obj2_1_1 
obj1_1 has 4 items in list 
......obj2_0_0 
......obj2_0_1 
......obj2_1_0 
......obj2_1_1 

爲什麼不兩OBJ1列出各有2個項目?有沒有更好的方法來實現這一點?

+1

思考。如果你需要對象變量,你需要在__init__中定義它們,就像HYRY說的那樣。 – Bogdan

回答

8

list_of_obj2是OBJ1的類屬性,如果你想實例屬性:你聲明的變量在Java中的靜態變量的

class Obj1(object): 
    def __init__(self): 
     self.list_of_obj2 = []