Я бы сказал, здесь тоже нет .
Часть кода, вызывающая путаницу:
OAuth2Bearer(self._api_key, self.access_token)
Вам нужно знать одну вещь: хотя OAuth2Bearer
- это имя класса, это также объект класса type
(встроенный класс). Поэтому, когда вы пишете вышеупомянутую строку, то, что на самом деле называется
type.__call__()
Это можно легко проверить, если вы попробуете этот код:
print(repr(OAuth2Bearer.__call__))
он вернет что-то вроде этого:
<method-wrapper '__call__' of type object at 0x12345678>
Что type.__call__
делает и возвращает, хорошо освещено в других вопросах: он вызывает OAuth2Bearer.__new__()
для создания объекта, а затем инициализирует этот объект с помощью obj.__init__()
и возвращает этот объект .
Вы можете думать о содержимом OAuth2Bearer(self._api_key, self.access_token)
следующим образом (псевдокод для иллюстрации)
OAuth2Bearer(self._api_key, self.access_token):
obj = OAuth2Bearer.__new__(OAuth2Bearer, self._api_key, self.access_token)
obj.__init__()
return obj