python - 递归转储一个对象

标签 python

我不确定是否有这样做的标准方法。我已经实现了以下函数来转储对象的所有内容。它必须递归地转储子对象,因此我正在检查 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/

相关文章:

python - Databricks 群集未初始化 Azure 库,错误为 : module 'lib' has no attribute 'SSL_ST_INIT'

python - Pygame | Blited 图像不断地跳来跳去

python - 数组转换的内存问题

python - 为 Django.db 连接对象指定只读访问

python - Eclipse pydev : Supress no-self errors in python wrappers generated with swig

python - 是否有可能在 python 中获取临时文件的 md5 哈希?

python - 我的链接列表出了什么问题?

python pandas 重新索引删除 0.0 处的数据

python - 在轴之间移动集合

python - 模块函数 vs 静态方法 vs 类方法 vs 无装饰器 : Which idiom is more pythonic?