当我打印myobject的$ dict 时,它会返回:
{'string': u'abc', 'object': <DEMO.Detail object at 0xb5b691ac>}
我想要返回myobject的字典,并且我的对象中的所有对象也会变为dict:
{'string': u'abc', 'object': {'obj_string': u'xyz', 'obj_object': {...}}}
请给我一些帮助。
由于
答案 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__
。
如果您不控制对象,则可以设置递归打印功能,以检查对象是否为已知容器类型(list
,tuple
,dict
,{{ 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}}