如何在Python中打印对象

时间:2015-11-16 07:31:24

标签: python python-2.7 object python-3.x converter

当我打印myobject的$ dict 时,它会返回:

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

我想要返回myobject的字典,并且我的对象中的所有对象也会变为dict:

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

请给我一些帮助。

由于

2 个答案:

答案 0 :(得分:4)

如果您是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)

在您的情况下,我假设您要在dict(self)内拨打__str__

如果您不控制对象,则可以设置递归打印功能,以检查对象是否为已知容器类型(listtupledict,{{ 1}})并递归调用这些类型的迭代,并根据需要打印所有自定义类型。

应该有一种方法可以使用自定义PrettyPrinter覆盖set。我虽然从未这样做过。

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

答案 1 :(得分:1)

可以用漂亮的印刷吗?

>>> 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}}