小编典典

如何跟踪类实例?

python

在程序快要结束时,我希望将类的所有实例中的特定变量加载到字典中。

例如:

class Foo():
    __init__(self):
    x = {}

foo1 = Foo()
foo2 = Foo()
foo...etc.

假设实例数量会有所不同,我希望将Foo()的每个实例的x dict加载到新的dict中。我该怎么办?

我在SO中看到的示例假定一个已经具有实例列表。


阅读 209

收藏
2020-12-20

共1个答案

小编典典

跟踪实例的一种方法是使用类变量:

class A(object):
    instances = []

    def __init__(self, foo):
        self.foo = foo
        A.instances.append(self)

在程序结束时,您可以像下面这样创建字典:

foo_vars = {id(instance): instance.foo for instance in A.instances}

只有一个列表:

>>> a = A(1)
>>> b = A(2)
>>> A.instances
[<__main__.A object at 0x1004d44d0>, <__main__.A object at 0x1004d4510>]
>>> id(A.instances)
4299683456
>>> id(a.instances)
4299683456    
>>> id(b.instances)
4299683456
2020-12-20