我不确定是否有这样做的标准方法。我已经实现了以下函数来转储对象的所有内容。它必须递归地转储子对象,因此我正在检查 InstanceType
,但它不起作用:
import types
def dump_obj(obj, level=0):
for a in dir(obj):
try:
if type(obj.__dict__[a]) == types.InstanceType:
dump_obj(obj.__dict__[a], level + 2)
else:
try:
print " " * level + "%s -> %s" % (a, obj.__dict__[a])
except:
pass
except:
pass
如何验证一个元素本身是否是一个对象?
我真正想要的是以下内容。鉴于:
class B:
def __init__(self):
self.txt = 'bye'
class A:
def __init__(self):
self.txt = 'hello'
self.b = B()
a = A()
dump_obj(a)
我想要以下输出:
txt -> hello
txt -> bye
最佳答案
这将递归地转储任何对象和所有子对象。其他答案适用于简单的示例,但对于复杂的对象,它们缺少一些数据。
import jsonpickle # pip install jsonpickle
import json
serialized = jsonpickle.encode(obj)
print(json.dumps(json.loads(serialized), indent=2))
编辑:如果您使用 YAML 格式,它将更接近您的示例。
import yaml # pip install pyyaml
print(yaml.dump(yaml.load(serialized), indent=2))
关于python - 递归转储一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16354371/