2014-10-17 51 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) 
相关问题