为什么vars(响应)没有显示response.text? (使用Python Requests模块)

时间:2015-02-20 18:55:30

标签: python python-requests

import requests
response = requests.get('http://httpbin.org/get')
print vars(response) # no response.text listed
print response.text # value printed

为什么vars(response)在该值存在时未列出response.text

dir(response)会列出response.text,但不会打印它的值。

2 个答案:

答案 0 :(得分:2)

对于第一个问题,text中未显示vars的原因是because it's a property(由@property定义),而不是类属性(这是最终由__dict__所示的vars中的内容。

对于第二个问题,这是因为dirvars的工作方式。

来自vars的文档:

  

vars([object])

     

返回模块,类,实例或任何内容的 dict 属性   具有 dict 属性的其他对象。

     

模块和实例等对象具有可更新的 dict   属性;但是,其他对象可能会对其进行写入限制    dict 属性(例如,新式类使用dictproxy来阻止直接字典更新)。

     

没有参数,vars()就像locals()一样。请注意,当地人   字典仅对本地的更新有用   字典被忽略了。

对于dir

  

默认的dir()机制对不同类型的行为有所不同   对象,因为它试图产生最相关的,而不是   完整,信息:

     

如果对象是模块对象,则列表包含的名称   模块的属性。如果对象是类型或类对象,则列表   包含其属性的名称,并递归地包含   其基础的属性。否则,列表包含对象的   属性的名称,类的属性名称和   递归地类的基类的属性。

所以基本上dir只打印出传入参数的属性,其对应的值。

此外,this answer在解释差异方面非常全面。

答案 1 :(得分:1)

它不在vars结果中,因为vars不会将属性解析为对象的父类。见this other thread on SO

您可以通过在对象上使用dir来请求所有“属性,其类的属性以及递归其类的基类的属性”:

In [1]: import requests

In [2]: response = requests.get('http://httpbin.org/get')

In [3]: 'text' in vars(response)
Out[3]: False

In [4]: 'text' in dir(response)
Out[4]: True