2014-10-17 39 views
-1

我有一個擁有數千個實例的Python類。如何獲得一個類的所有實例的變量的值

每個實例都包含多個變量。

我需要檢索該類的所有實例的特定列表變量的值。

我相信這與做...

__dict__ 

我似乎無法得到正確的語法來獲得我所需要的數據。

我知道這是一個簡單的1行代碼。任何人都知道該代碼是什麼?

+0

你需要證明你的嘗試和類的例子! – Kasramvd 2014-10-17 09:44:50

+0

沒有辦法得到一個類的所有實例的列表。您將不得不手動維護這樣的列表。 'weakref'模塊可能對此有所幫助。 – 2014-10-17 09:49:50

回答

1

正如克勞斯·d說,你應該保持一個手動列表。但是,如果所有這些實例都存在於一個函數的本地範圍內,則下面的代碼顯示瞭如何獲取它們。但即使這是可能的,我強烈建議你不是做這種事情。

#! /usr/bin/env python 

import random 

class myclass(): 
    def __init__(self, data): 
     self.data = data 

def main(): 
    random.seed(42) 

    #Create some instances of myclass 
    for i in range(10): 
     s = "a%02d = myclass(%d)" % (i, random.randint(0, 99)) 
     print s 
     exec(s) in globals(), locals() 

    #Extract all instances of myclass from the locals() dict 
    instances = dict((k, v) for k, v in locals().items() if isinstance(v, myclass)) 

    for name in sorted(instances.keys()): 
     print "%s : %2d" % (name, instances[name].data) 


if __name__ == "__main__": 
    main() 

輸出

a00 = myclass(63) 
a01 = myclass(2) 
a02 = myclass(27) 
a03 = myclass(22) 
a04 = myclass(73) 
a05 = myclass(67) 
a06 = myclass(89) 
a07 = myclass(8) 
a08 = myclass(42) 
a09 = myclass(2) 
a00 : 63 
a01 : 2 
a02 : 27 
a03 : 22 
a04 : 73 
a05 : 67 
a06 : 89 
a07 : 8 
a08 : 42 
a09 : 2 
0

可以訪問對象的所有變量與vars

返回的__dict__屬性爲一個模塊,類,實例,或用__dict__屬性的任何其他對象。

所以,僅僅通過對象vars作爲參數:

vars(obj) 
相關問題