如何在 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)
如果您不控制该对象,您可以设置一个递归打印函数来检查该对象是否属于已知容器类型(list
、tuple
、dict
set
) 并递归调用遍历这些类型,根据需要打印所有自定义类型。
应该有一种方法可以用自定义 PrettyPrinter 覆盖 pprint
。不过我从来没有这样做过。
最后,您还可以自定义 JSONEncoder 来理解您的自定义类型。除非您确实需要 JSON 格式,否则这不是一个好的解决方案。
当我打印 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)
如果您不控制该对象,您可以设置一个递归打印函数来检查该对象是否属于已知容器类型(list
、tuple
、dict
set
) 并递归调用遍历这些类型,根据需要打印所有自定义类型。
应该有一种方法可以用自定义 PrettyPrinter 覆盖 pprint
。不过我从来没有这样做过。
最后,您还可以自定义 JSONEncoder 来理解您的自定义类型。除非您确实需要 JSON 格式,否则这不是一个好的解决方案。