如何在 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实例化时无法获取变量名,因为变量还不存在
我想获取为 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实例化时无法获取变量名,因为变量还不存在