在Ruby中,可以通过p my_obj
检查变量(对象),因此它会将其打印为“深度”并尽可能详细。它对日志记录和调试很有用。在python中我认为它是print my_obj
,只是它打印得不多,但<requests.sessions.Session object at 0x7febcb29b390>
根本没用。
我该怎么做?
答案 0 :(得分:3)
您可以使用vars
内置方法获取对象属性的字典:
>>> import requests
>>> r = requests.Session()
>>> vars(r)
{'cookies': <<class 'requests.cookies.RequestsCookieJar'>[]>, 'stream': False, 'hooks': {'response': []}, 'auth': None, 'trust_env': True, ...}
也许将它与pprint
结合起来得到一个有点格式化的输出:
>>> import pprint
>>> pprint.pprint(vars(r), indent=2)
{ 'adapters': OrderedDict([('https://', <requests.adapters.HTTPAdapter object at 0x103106690>), ('http://', <requests.adapters.HTTPAdapter object at 0x103106790>)]),
'auth': None,
'cert': None,
'cookies': <<class 'requests.cookies.RequestsCookieJar'>[]>,
...
答案 1 :(得分:3)
我推荐inspect
模块:
import inspect
print inspect.getmembers(my_obj)
这包括__dict__
,但也包括有关该对象的所有方法的详细信息,这可能非常有用。
答案 2 :(得分:2)
这是&#34; print&#34;最通用的方法。一个对象,只是不是每个对象都有一个非常有用的打印输出;事实上,很可能并非如此。
如果您正在使用其他人创建的对象,您通常会查看文档以了解如何查看其变量等等。这往往会给你最漂亮的输出。这个问题的其他答案提供了一种检查对象的更通用的方法,这比查找文档要快得多,也更容易;据我所知,他们做了一个更浅层的检查,但他们是一个很好的起点。
如果您正在创建自己的对象,那么您将要定义一个名为__str__()
的方法,该方法返回一个字符串。然后,只要您说print obj
,就会调用该对象的__str__()
函数,并返回该字符串。
在您的情况下,如果您有一个名为request.Session()
的{{1}}对象,根据文档,您可以使用my_obj
进行打印。
答案 3 :(得分:2)
dir()
可能会给你你想要的东西:
for key in dir(my_obj):
print('{}: {}'.format(key, getattr(my_obj, key))
如果我不得不猜测,那里有更多你想要的信息:)
答案 4 :(得分:-1)
如果您想完全控制对象的打印,请为您的班级定义__repr__
和__str__
函数。
class Node(object):
""" A node object with an index"""
def __init__(self,index = 0):
self.index = index
def __repr__(self):
print "Node %s" % self.index
def __str__(self):
print "Node %s" % self.index
有时您会希望查看详细信息,因此只覆盖__str__
可能是个好主意。
有关repr和str之间区别的详细信息:Difference between __str__ and __repr__ in Python