Это анти-шаблон ОО.
class API_Connection(object):
def do_something_with_api_response(self, response):
...
def do_something_else_with_api_response(self, response):
...
У вас есть два метода в экземпляре, и вы явно передаете состояние между ними?Почему эти методы, а не голые функции в модуле?
Вместо этого подумайте об использовании инкапсуляции, чтобы помочь экземпляру класса иметь ответ API.
Например:
class API_Connection(object):
def __init__(self, api_url):
self._url = api_url
self.cached_response = None
@property
def response(self):
"""Actually use the _url and get the response when needed."""
if self._cached_response is None:
# actually calculate self._cached_response by making our
# remote call, etc
self._cached_response = self._get_api_response(self._url)
return self._cached_response
def _get_api_response(self, api_param1, ...):
"""Make the request and return the api's response"""
def do_something_with_api_response(self):
# just use self.response
do_something(self.response)
def do_something_else_with_api_response(self):
# just use self.response
do_something_else(self.response)
У вас есть кэширование и всеметод, которому нужен этот ответ, может выполняться в любом порядке, не делая несколько запросов API, потому что первый метод, которому требуется self.response
, будет вычислять его, а каждый другой будет использовать кэшированное значение.Надеюсь, это легко представить, добавив несколько URL-адресов или вызовов RPC.Если вам нужно много методов, которые кешируют свои возвращаемые значения, например response
выше, вам следует обратиться к декоратору памятки для ваших методов.