如何在 Python 中打印对象

How to print an object in Python

当我打印 myobject 的 $dict 时,它 returns:

{'string': u'abc', 'object': <DEMO.Detail object at 0xb5b691ac>}

我想要它 return myobject 的字典,并且我的对象中的所有对象也都更改为字典:

{'string': u'abc', 'object': {'obj_string': u'xyz', 'obj_object': {...}}}

请帮忙,

谢谢

prettyprint 可以吗?

>>> import pprint
>>> a = {'foo':{'bar':'yeah'}}
>>> pprint.pprint(a)
{'foo': {'bar': 'yeah'}}

如果您的对象已 __repr__ 实现,它也可以打印这些对象。

import pprint
class Cheetah:
    def __repr__(self):
        return "chirp"

zoo = {'cage':{'animal':Cheetah()}}
pprint.pprint(zoo) 

# Output: {'cage': {'animal': chirp}}

如果您是 DEMO.Detail 的创建者,您可以添加 __repr____str__ 方法:

class Detail:
    def __str__(self):
        return "string shown to users (on str and print)"
    def __repr__(self):
        return "string shown to developers (at REPL)"

这将导致您的对象以这种方式运行:

>>> d = Detail()
>>> d
string shown to developers (at REPL)
>>> print(d)
string shown to users (on str and print)

在你的情况下,我假设你想在 __str__.

中调用 dict(self)

如果您不控制该对象,您可以设置一个递归打印函数来检查该对象是否属于已知容器类型(listtupledict set) 并递归调用遍历这些类型,根据需要打印所有自定义类型。

应该有一种方法可以用自定义 PrettyPrinter 覆盖 pprint。不过我从来没有这样做过。

最后,您还可以自定义 JSONEncoder 来理解您的自定义类型。除非您确实需要 JSON 格式,否则这不是一个好的解决方案。