如何在 python 中打印 class 的所有实例?

How to print all the instances of a class in python?

我想获取为 class 创建的所有实例。 有什么方法可以在不导入任何模块的情况下获取实例吗?

我试过用这种方式将自己附加到 class 属性中。

class A(object):
    instances = []

    def __init__(self, foo):
        self.foo = foo
        A.instances.append(self)
        
foo = A("hi")
bar = A("Hey")
star = A("Hero")

for instance in A.instances:
    print("Ins is ",instance)

输出

<__main__.A object at 0x148b8b6e0780>,
<__main__.A object at 0x148b8b6e0780>,
<__main__.A object at 0x148b8b6e0780>

我希望它打印 foo、bar、star。 有没有什么方法可以在没有任何模块的情况下将其放入 class?

使用此代码段:

for instance in A.instances:
    print("Ins is ", (instance.__dict__).get("foo"))

输出:

Ins is  hi
Ins is  Hey
Ins is  Hero

或:

for instance in A.instances:
    print("Ins is ", instance.__dict__)

输出:

Ins is  {'foo': 'hi'}
Ins is  {'foo': 'Hey'}
Ins is  {'foo': 'Hero'}

要打印一个对象,你可以把它变成一个字典。在这种情况下,这些值将是可打印的。

这种方法通常用于将对象转换为字典,然后再转换为JSON类型,广泛用于交换信息。

如果我猜对了,你可以执行以下操作:

提案

tmp = globals().copy()
print(tmp)

for k,v in tmp.items():
    if isinstance(v, A):
        print(k)

你必须复制全局变量字典,否则我会随着 for-loop 中的第一个实例化而改变:

结果:

foo
bar
star

无法在 class 中定义此类行为,因为 class 会在实例化后为变量赋值。 class实例化时无法获取变量名,因为变量还不存在