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
,但是并没有显示它的值。
对于第一个问题,之所以text
没有出现,vars
是因为它是一个属性(由定义@property
),而不是一个类属性(__dict__
由表示vars
)。
对于第二个问题,这是因为方式dir
和vars
工作原理。
从文档中vars
:
vars([object])
返回字典属性为一个模块,类,实例,或与任何其它物体的dict属性。
对象(例如模块和实例)具有可更新的dict属性。但是,其他对象可能对其dict属性具有写限制(例如,新式类使用dictproxy来防止直接字典更新)。
没有参数,vars()的行为类似于locals()。请注意,本地字典仅对读取有用,因为忽略了本地字典的更新。
对于dir
:
默认的dir()机制对不同类型的对象的行为有所不同,因为它试图产生最相关的信息,而不是完整的信息:
如果对象是模块对象,则列表包含模块属性的名称。如果对象是类型或类对象,则列表包含其属性的名称以及递归其基础属性的名称。否则,列表将包含对象的属性名称,其类的属性名称以及递归其类的基类的属性。
因此,基本上dir
只是打印出传入参数的属性,而不是其对应的值。
同样,这个答案在解释差异方面非常全面。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句