2015-09-17 26 views
0

所以我試圖將一些列表存儲到屬於「人」的列表中。我試圖用一些類來做到這一點:在詞典中創建類 - 在類之間複製值?

class data(): 
    # Contains list of x, y, z, time lists 
    x = [] 
    y = [] 
    z = [] 
    time = [] 

class data_main(): 
    # Contains data for each Pi 
    data_plot = data() 
    data_overflow = data() 

piList = ["Lui", "Wing"]  
rpi_data = {} 

for pi in piList: 
    rpi_data[pi] = data_main() 


rpi_data["Lui"].data_plot.x = 10 
rpi_data["Wing"].data_plot.x = 99 

print(rpi_data["Lui"].data_plot.x) 
print(rpi_data["Wing"].data_plot.x) 

問題是,我真的不知道會有多少人。因此,我想創建屬於不同人的類「data_main」的字典。

當我嘗試這樣做,控制檯的結果是:

99 
99 

當我寧願它:分別爲10和99。我擔心的是,在for循環:

for pi in piList: 
    rpi_data[pi] = data_main() 

我真的只是指定data_main()的字典詞條的同一個實例的時候,確實我喜歡獨特的,讓他們每個人都能有他們自己的價值。

我該如何做到這一點?

編輯:我做了更多的挖掘,結果data_plot爲data_main()的兩個實例指向相同的地址。如何避免這種情況(即我每次初始化一個新data_main()班,我創造新的data_plot()和data_overflow()班太費時間?)

回答

4

data_plotdata_overflow是類屬性不是實例屬性,因此它們在類被定義時被初始化,而不是在實例被創建時被初始化,並且它們在類的所有實例之間被共享。您應該在__init__()方法中將它們創建爲實例屬性。示例 -

class data_main: 
    def __init__(self): 
     # Contains data for each Pi 
     self.data_plot = data() 
     self.data_overflow = data() 

而且在data類,在它的屬性也是類的屬性,你應該讓他們實例屬性爲好。示例 -

class data: 
    def __init__(self): 
     # Contains list of x, y, z, time lists 
     self.x = [] 
     self.y = [] 
     self.z = [] 
     self.time = [] 

最後,先在data類要定義x作爲一個列表,然後要更改xrpi_data["Lui"].data_plot.x了一些,當你做 -

rpi_data["Lui"].data_plot.x = 10   #or the 99 one. 

如果您打算將該號碼附加到x列表中,則應使用 -

rpi_data["Lui"].data_plot.x.append(10) 
+0

是的!我真的很愚蠢,並且剔除了課程的文檔。這會教會我下次更仔細閱讀。非常感謝! – Lui

+0

哦,將「x」設置爲10(當它應該是一個列表),這只是我懶惰地測試數值。歡呼聲,幫助 – Lui