Python 重用url请求方法
我有一个类提供了很多类似的方法:Python 重用url请求方法,python,python-requests,reusability,Python,Python Requests,Reusability,我有一个类提供了很多类似的方法: class Helper: BASE_URL = "xxx:xxx" @staticmethod def get_A(): url = BASE_URL + "/a?" resp = requests.get(url) ret_json = json.loads(resp.content) return [r["id"] for r in ret_json["people"]
class Helper:
BASE_URL = "xxx:xxx"
@staticmethod
def get_A():
url = BASE_URL + "/a?"
resp = requests.get(url)
ret_json = json.loads(resp.content)
return [r["id"] for r in ret_json["people"]]
@staticmethod
def get_B():
url = BASE_URL + "/b/list"
resp = requests.get(url)
ret_json = json.loads(resp.content)
return {r["name"]: r["gender"] for r in ret_json["people"]}
@staticmethod
def post_C():
url = BASE_URL + "/admin/c"
resp = requests.post(url)
ret_json = json.loads(resp.content)
return ret_json["date"]
......
@staticmethod
def get_Z():
.......
如何重用部件url=BASE\u url+diff\u url;resp=requests.get(url);ret_json=json.load(resp.content)
在这些方法中,让它们返回ret_json
的不同部分,或者让它们保持原样
说清楚 我怎样才能将这些方法组合成这样的一种方法:
def get_something(*arg, **kwargs):
url = BASE_URL + ...
resp = requests.get/post(url)
ret_json = json.loads(resp.content)
return "different part of ret_json"
您希望在包含公共部分的类上创建一个方法。比如:
class Helper:
BASE_URL = "xxx:xxx"
@staticmethod
def _base_get(suffix):
url = BASE_URL + suffix
resp = requests.get(url)
return json.loads(resp.content)
@staticmethod
def get_A():
ret_json = Helper._base_get('/a?')
return [r["id"] for r in ret_json["people"]]
使用一个helper函数来完成这些函数所共有的事情。并使用
requests.request
允许通过不同的HTTP方法进行请求
class Helper:
BASE_URL = "xxx:xxx"
@staticmethod
def request(method, path):
url = BASE_URL + path
resp = requests.request(method, url)
return json.loads(resp.content)
@staticmethod
def get_A():
ret_json = Helper.request('GET', "/a?")
return [r["id"] for r in ret_json["people"]]
@staticmethod
def get_B():
ret_json = Helper.request('GET', "/b/list")
return {r["name"]: r["gender"] for r in ret_json["people"]}
@staticmethod
def post_C():
ret_json = Helper.request('POST', "/admin/c")
return ret_json["date"]
对不起,我的问题不清楚,我想在这里只有一个方法来表达所有这些方法。可能吗?可能,但不建议这样做,因为它们都返回完全不同的对象--
get\u A
返回一个列表,get\u B
返回一个dict,post\u C
返回一个字符串。通过使用固定的返回数据类型来保持函数签名的一致性是一种很好的做法。对于我不清楚的问题,很抱歉,这里我只想用一种方法来表示所有这些方法。有可能吗?如果没有一个相当不吸引人而且不明智的,如果。。。埃利夫。。。else
块。您可以重用常见的片段(如my和其他答案所建议的),但如果没有某种条件求值,就无法让方法返回完全不同的类型(list
,dict
,str
)。无论如何,你不应该想要那样——在这种情况下,没有统一的合同。打电话的人不知道会发生什么。