I am going through the code of Python requests
library from Kenneth Reitz (which is awesome!). And I have encountered a Class variable named __attrs__
(see below). Tried to find out something about it via Google and SymbolHound, but no luck.
Is this a standard Python thing? Where can I find more infos? Can someone enlighten me?
From: 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()
This is not a standard Python thing. As far as I can tell, it's only there to be used in the __getstate__
method further down the class:
def __getstate__(self):
state = dict((attr, getattr(self, attr, None)) for attr in self.__attrs__)
state['redirect_cache'] = dict(self.redirect_cache)
return state
The name __attrs__
is a poor choice, as names beginning and ending with __
are reserved for core Python language features.
It is not standard, because it is not part of the Python Object Model.
The requests module uses it here (Response object), too, for reference
It just a way to keep some state hidden (at least as hidden as possible, because nothing is truly hidden in Python).
The writers of this code just delegate to this dictionary using a call that is part of the Python Object Model getattr
:
return {attr: getattr(self, attr, None) for attr in self.__attrs__}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With