作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个向远程 API 发出请求的类。我希望能够减少我调用的电话数量。我的类中的一些方法进行相同的 API 调用(但出于不同的原因),所以我希望它们能够“共享”缓存的 API 响应。
我不完全确定是使用可选参数还是使用多个方法更符合 Python 风格,因为如果方法进行 API 调用,它们会有一些必需的参数。
以下是我所看到的方法,您认为哪种方法最好?
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
或者这个:
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
还是这样更合适?
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
最佳答案
通常在编写方法时,人们可能会争辩说方法/对象应该做一件事,而且应该做得很好。如果您的方法获得越来越多的参数,而这些参数在您的代码中需要越来越多的 ifs,那可能意味着您的代码正在做不止一件事。特别是如果这些参数触发完全不同的行为。相反,也许可以通过使用不同的类并让它们重载方法来产生相同的行为。
也许你可以使用类似的东西:
class BaseClass(object):
def a_method(self, item_id):
response = lookup_response(item_id)
return response
class CachingClass(BaseClass):
def a_method(self, item_id):
if item_id in cache:
return item_from_cache
return super(CachingClass, self).a_method(item_id)
def uncached_method(self, item_id)
return super(CachingClass, self).a_method(item_id)
这样您就可以拆分如何查找响应和缓存的逻辑,同时还可以让 API 的用户灵活地决定他们是否需要缓存功能。
关于Python - 最好有多种方法或大量可选参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7150987/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!