Tengo una clase que realiza solicitudes a una API remota. Me gustaría poder reducir el número de llamadas que estoy haciendo. Algunos de los métodos en mi clase hacen las mismas llamadas a la API (pero por diferentes razones), por lo que me gustaría tener la capacidad de 'compartir' una respuesta de la API en caché.Python: ¿es mejor tener múltiples métodos o muchos parámetros opcionales?
No estoy del todo seguro de si es más pitónico utilizar los parámetros opcionales o utilizar varios métodos, ya que los métodos tienen algunos parámetros necesarios si realizan una llamada a la API.
Aquí están los enfoques como yo los veo, ¿cuál crees que es el mejor?
class A:
def a_method(item_id, cached_item_api_response = None):
""" Seems awkward having to supplied item_id even
if cached_item_api_response is given
"""
api_response = None
if cached_item_api_response:
api_response = cached_item_api_response
else:
api_response = ... # make api call using item_id
... #do stuff
O esto:
class B:
def a_method(item_id = None, cached_api_response = None):
""" Seems awkward as it makes no sense NOT to supply EITHER
item_id or cached_api_response
"""
api_response = None
if cached_item_api_response:
api_response = cached_item_api_response
elif item_id:
api_response = ... # make api call using item_id
else:
#ERROR
... #do stuff
O se trata más apropiado?
class C:
"""Seems even more awkward to have different method calls"""
def a_method(item_id):
api_response = ... # make api call using item_id
api_response_logic(api_response)
def b_method(cached_api_response):
api_response_logic(cached_api_response)
def api_response_logic(api_response):
... # do stuff
Gracias por la edición, pero normalmente sugeriría utilizar la delegación en lugar de la herencia, ya que hace que las clases sean más flexibles. – Rickard
Si esta no era su intención, lo siento por cambiarla. Era solo una pregunta de Python y tu código no era Python, así que hice mi mejor conjetura; siéntete libre de revertirlo o cambiarlo para reflejar tu intención. (Buena respuesta de cualquier manera, ya obtuve mi +1) – agf