Tôi có một lớp yêu cầu một API từ xa. Tôi muốn có thể giảm số lượng cuộc gọi mà tôi đang thực hiện. Một số phương thức trong lớp của tôi thực hiện các cuộc gọi API giống nhau (nhưng vì các lý do khác nhau), vì vậy I'ld giống như khả năng cho họ 'chia sẻ' một phản hồi API được lưu trong bộ nhớ cache. Tôi không hoàn toàn chắc chắn nếu nó có thêm Pythonic để sử dụng các tham số tùy chọn hoặc sử dụng nhiều phương pháp, vì các phương thức có một số tham số cần thiết nếu chúng đang thực hiện cuộc gọi API.Python - Tốt hơn để có nhiều phương pháp hoặc nhiều tham số tùy chọn?
Dưới đây là những người phê duyệt như tôi thấy chúng, bạn nghĩ điều gì là tốt nhất?
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
Hoặc này:
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
Hoặc là này thích hợp hơn?
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
Cảm ơn bạn đã chỉnh sửa, nhưng thông thường tôi sẽ đề xuất sử dụng ủy quyền thay vì thừa kế vì nó làm cho các lớp linh hoạt hơn. – Rickard
Nếu đây không phải là ý định của bạn, xin lỗi vì đã thay đổi nó. Nó chỉ là một câu hỏi Python và mã của bạn không phải là Python vì vậy tôi đã thực hiện tốt nhất của tôi đoán - cảm thấy tự do để cuộn nó trở lại hoặc thay đổi nó để phản ánh ý định của bạn. (Tốt câu trả lời bất kỳ cách nào, đã có +1 của tôi) – agf