如何跟踪类实例?

发布于 2021-01-29 17:44:48

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

例如:

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

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

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

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

关注者
0
被浏览
50
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

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

    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
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看