我正在浏览Kenneth Reitz的Python requests
库代码(很棒!)。我遇到了一个名为__attrs__
的类变量(见下文)。试图通过谷歌和SymbolHound找到它的相关信息,但没有运气。
这是标准的Python吗?我在哪里可以找到更多信息?有人可以开导我吗?
来自:https://github.com/kennethreitz/requests/blob/master/requests/sessions.py
class Session(SessionRedirectMixin):
...
__attrs__ = [
'headers', 'cookies', 'auth', 'proxies', 'hooks', 'params', 'verify',
'cert', 'prefetch', 'adapters', 'stream', 'trust_env',
'max_redirects',
]
def __init__(self):
#: A case-insensitive dictionary of headers to be sent on each
#: :class:`Request <Request>` sent from this
#: :class:`Session <Session>`.
self.headers = default_headers()
答案 0 :(得分:15)
这不是标准的Python事物。据我所知,只有在__getstate__
方法中进一步使用该类:
def __getstate__(self):
state = dict((attr, getattr(self, attr, None)) for attr in self.__attrs__)
state['redirect_cache'] = dict(self.redirect_cache)
return state
名称__attrs__
是一个糟糕的选择,因为以__
开头和结尾的名称是为核心Python语言功能保留的。
答案 1 :(得分:1)
这不是标准的,因为它不是Python对象模型的一部分。
请求模块也使用它here(响应对象)作为参考
这只是使某些状态保持隐藏的一种方式(至少要尽可能隐藏,因为什么在Python中都是真正隐藏的)。
此代码的编写者仅使用 是Python对象模型getattr
一部分的调用将其委托给该字典:
return {attr: getattr(self, attr, None) for attr in self.__attrs__}