Python __attrs__解释道

时间:2017-03-15 20:38:48

标签: python

我正在浏览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()

2 个答案:

答案 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__}